C检查文件是否存在

在我必须用C89标准做的项目中,我必须检查文件是否存在。 我该怎么做呢?

我想过要用

FILE *file; if ((file = fopen(fname, "r")) == NULL) { printf("file doesn't exists"); } return 0; 

但我认为可能有更多的情况,然后文件不存在,将执行fopen == NULL。

我该怎么做呢? 我宁愿不使用包含而不是。

如果您不能在您的环境中使用stat()(这绝对是更好的方法),只需评估errno。 别忘了包含errno.h。

 FILE *file; if ((file = fopen(fname, "r")) == NULL) { if (errno == ENOENT) { printf("File doesn't exist"); } else { // Check for other errors too, like EACCES and EISDIR printf("Some other error occured"); } } else { fclose(file); } return 0; 

编辑:忘了将fclose包装成else

在纯ISO标准C中检查存在是不可能的。没有真正好的可移植方式来确定命名文件是否存在; 你可能不得不求助于系统特定的方法。

这不是一个便携式的东西,所以我会给你特定于操作系统的电话。

在Windows中,您使用GetFileAttributes并检查-1返回( INVALID_HANDLE或类似的东西)。

在Linux中,你有fstat这样做。

但是大多数时候,我只是做文件打开技巧来测试,或者只是继续使用该文件并检查exception(C ++ / C#)。

我想这与系统环境(如POSIX或BSD)有关,而不是与您使用的C语言版本有关。

在POSIX中有一个stat()系统调用,它将为您提供有关文件的信息,即使您无法读取它。 但是,如果文件位于您没有访问权限的路径中,则无论文件是否存在,它始终都会失败。

如果您无法访问该路径,则永远不可能查看包含的文件。

你真的想要访问该文件吗? 从unistd.h访问(filename,F_OK)== 0检查通常更好,我认为这是相当广泛的标准。