给定其路径的文件的存在

时间:2011-09-17 16:59:23

标签: c linux filesystems

考虑到路径,有没有办法在不打开文件的情况下找出文件是否存在?

谢谢

4 个答案:

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