鉴于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以查看它是否存在:)