【发布时间】:2010-09-18 19:22:04
【问题描述】:
有没有比简单地打开文件更好的方法?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
【问题讨论】:
-
您真的只是想检查是否存在?或者您是否要检查并写入该文件(如果该文件尚不存在)。如果是这样,请参阅下面的答案,以获得不受竞争条件影响的版本。
-
我看不到 - 那种 fopen/fclose 方式有什么问题?
-
@JohannesSchaub-litb:
fopen()/fclose()方法的一个问题是即使文件存在,您也可能无法打开文件进行读取。比如/dev/kmem是存在的,但是大部分进程连读都打不开。/etc/shadow是另一个这样的文件。当然,stat()和access()都依赖于能够访问包含文件的目录;如果你不能这样做(对包含文件的目录没有执行权限),那么所有的赌注都会被取消。 -
if (file = fopen(fname, "r"))会发出警告。在 if 语句内使用括号括起来if ((file = fopen(fname, "r"))) -
@Joakim
(())正在解决症状,而不是问题。只需将其分成几行;一条额外的线不会有那么大的伤害。file = fopen(fname, "r");if (file)
标签: c filesystems cross-platform