考虑到路径,有没有办法在不打开文件的情况下找出文件是否存在?
谢谢
答案 0 :(得分:7)
最有效的方法是使用F_OK
标记的access
。
stat
也可以,但它的重量要大得多,因为它必须读取inode内容,而不仅仅是目录。
答案 1 :(得分:3)
您可以使用 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");
}
}
另一种方法是使用 access 功能。
#include <unistd.h>
main()
{
if(access("/Filepath/FileName", F_OK) != -1 )
{
printf("File exists\n");
}
else
{
printf("File does not exist\n");
}
}
答案 2 :(得分:1)
#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&amp; S_IFREG)== S_IFREG)”进行测试。 最好的方法是尝试使用open()或fopen()打开文件。
答案 3 :(得分:-2)
尝试删除它(unlink())。如果成功,它就不再存在了。如果不成功, 解释errno以查看它是否存在:)