如何通过C89检查文件是否存在?

时间:2012-09-30 06:50:20

标签: c

我为我糟糕的英语道歉。

不同的文件可以具有不同的权限。例如,我可能没有文件读/写权限,但此文件存在。如何通过C89检查此类文件的存在?

谢谢。 最诚挚的问候

3 个答案:

答案 0 :(得分:3)

纯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

答案 1 :(得分:2)

如果您坚持使用C89,则没有通用的检查文件存在的方法。

在C89,POSIX功能之外还有一些标准功能:

stat()

fstat()

无论如何,它取决于操作系统,因为语言本身不提供此类功能。

答案 2 :(得分:2)

没有可移植的方法来确定文件是否存在;您必须使用特定于系统的方法(例如来自POSIX.1的accessstat)。有时,可能无法检查命名文件是否存在,因为您无权读取可能包含该文件的目录。