检查文件是否存在的最快方法

这个问题在这里已经有了答案:

  • 检查C文件是否存在的最佳方法是什么? (跨平台)8个答案

  • 在Windows上,有PathFileExists()。

    在POSIX系统上,你有stat()或access()。

    也就是说,如果您检查文件是否存在,因为您的代码需要该文件,这是错误的方法 - 文件系统超出了您的程序控制范围,所以这将是竞争条件,唯一正确的方法是正确在打开文件时处理错误。


    你正在以错误的方式思考问题。 你不应该“检查一个文件是否已经存在”,因为它有一个固有的TOCTOU竞争 - 在你检查文件是否存在以及你对这些信息采取行动的时间之间,另一个进程可能会出现并改变该文件存在,使检查无效。

    你做什么取决于你想知道的原因。 一种非常常见的情况是您只想创建文件(如果文件尚不存在),在这种情况下,您可以在O_EXCL模式下使用较低级别的open函数:

    int fd = open("whatever", O_WRONLY|O_CREAT|O_EXCL, 0666);
    if (fd == -1 && errno == EEXIST) {
        /* the file already exists */
    } else if (fd == -1) {
        /* report that some other error happened */
    } else {
        FILE *fp = fdopen(fd, "w");
        /* write data to fp here */
    }
    

    另一个非常常见的情况是,如果文件不存在,您想要创建该文件,或者如果该文件存在,则将新数据附加到该文件; 这可以通过"a"模式来fopenO_APPEND标志open

    链接地址: http://www.djcxy.com/p/54571.html

    上一篇: Quickest way to check whether or not file exists

    下一篇: What does opening a file actually do?