存在一个给定path的文件

鉴于path,有没有办法找出文件是否存在,而无需打开文件?

谢谢

最有效的方式是access F_OK标志进行access

stat也起作用,但重量要重得多,因为它必须读取inode内容,而不仅仅是目录。

你可以使用stat系统调用。 请确保您检查errno是否正确,因为stat可能会因其他一些原因/失败而返回-1

 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> main() { struct stat BUF; if(stat("/Filepath/FileName",&BUF)==0) { printf("File exists\n"); } } 

另一种方法是使用访问功能。

 #include <unistd.h> main() { if(access("/Filepath/FileName", F_OK) != -1 ) { printf("File exists\n"); } else { printf("File does not exist\n"); } } 
 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <errno.h> int rc; struct stat mystat; rc = stat(path, &mystat); 

现在检查rc和(也许)errno。

编辑2011-09-18附录:

如果路径指向一个非文件(目录,fifo,符号链接等等),access()和stat()将返回0。

在stat()的情况下,可以用“((st_mode&S_IFREG)== S_IFREG)”来测试。 最好的方法仍然是尝试用open()或fopen()打开文件。

尝试删除它(取消链接())。 如果成功,它就不存在了。 如果不成功,则解释errno以查看它是否存在:)