我为我糟糕的英语道歉。
不同的文件可以有不同的权限。例如,我可以没有文件读/写权限,但这个文件是存在的。如何通过 C89 检查此类文件的存在?
谢谢你。最好的祝福
在纯 ISO C89 中,没有检查文件是否存在的良好且可移植的方法。但是,有实现定义的解决方案或其他特定于操作系统的扩展。例如:
int file_exists(const char *name)
{
return access(name, F_OK) == 0;
}
请注意,这个 ( access()
) 不是 C89 的一部分,但人们关心的大多数系统都有它。
或者有
int file_exists(const char *name)
{
FILE *f = fopen(name, "r");
if ((f == NULL) && (errno == ENOENT)) {
return 0;
}
fclose(f);
return 1;
}
这又不是 C89,但大多数符合 C89 的系统将提供ENOENT
.
另一种选择是使用该函数,如果文件不存在stat()
,它也会返回 -1 并设置errno
为。ENOENT
没有可移植的方法来确定文件是否存在;您必须求助于系统特定的方法(例如access
或stat
来自 POSIX.1)。有时,可能无法检查命名文件是否存在,因为您无权读取可能包含它的目录。