1

我为我糟糕的英语道歉。

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

谢谢你。最好的祝福

4

3 回答 3

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

于 2012-09-30T07:04:15.963 回答
2

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

C89、POSIX 函数之外还有一些标准函数:

统计()

fstat()

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

于 2012-09-30T07:05:21.197 回答
2

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

于 2012-09-30T07:22:15.700 回答