当前位置: 首页 > 知识库问答 >
问题:

使用标准C++/C++11/C检查文件是否存在的最快方法?

宗政欣可
2023-03-14

我想找到一种最快的方法来检查一个文件是否存在于标准C++11、C++或C中。我有数千个文件,在对它们进行操作之前,我需要检查它们是否全部存在。在下面的函数中,我可以写什么来代替/*SOMETHING*/

inline bool exist(const std::string& name)
{
    /* SOMETHING */
}

共有1个答案

辛盛
2023-03-14

我创建了一个测试程序,它运行这些方法每一个100,000次,一半在存在的文件上运行,另一半在不存在的文件上运行。

#include <sys/stat.h>
#include <unistd.h>
#include <string>
#include <fstream>

inline bool exists_test0 (const std::string& name) {
    ifstream f(name.c_str());
    return f.good();
}

inline bool exists_test1 (const std::string& name) {
    if (FILE *file = fopen(name.c_str(), "r")) {
        fclose(file);
        return true;
    } else {
        return false;
    }   
}

inline bool exists_test2 (const std::string& name) {
    return ( access( name.c_str(), F_OK ) != -1 );
}

inline bool exists_test3 (const std::string& name) {
  struct stat buffer;   
  return (stat (name.c_str(), &buffer) == 0); 
}

结果运行100,000个调用的总时间平均超过5次,

 类似资料:
  • 我想找到最快的方法来检查标准C 11、14、17或C中是否存在文件。我有数千个文件,在对它们执行操作之前,我需要检查它们是否都存在。在下面的函数中,我可以写什么来代替*/?

  • 我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?

  • 问题内容: 在我的代码中的某些情况下,只有在定义了该函数的情况下,我最终才调用该函数,否则我不应该调用该函数。我怎样才能做到这一点? 提出此问题的另一种方法可能是:如何确定函数是否在运行时定义,如果是,则调用。 问题答案: 尽管其他答复是有用的建议(,函数指针等),但是您 不能编译 引用不存在的函数的C ++代码。至少必须 声明 函数;如果不是,您的代码将无法编译。如果没有任何内容(编译单元,某些

  • 问题内容: 我有一个fstream my_file(“ test.txt”),但我不知道test.txt是否存在。如果存在,我也想知道是否也可以阅读。怎么做? 我使用Linux。 问题答案: 我可能会选择: 该方法检查流是否准备好从中读取。

  • 我想检查文件是否存在,并尝试使用以下函数 但是,它似乎不能正常工作,因为不是检查文件的存在而是创建文件!这里有什么问题? 请注意,我被迫使用C 98标准,无法使用include

  • 我正在使用fstream库来处理文件。基本上,我需要知道某个文件是否存在。在c留档online中,关于open(),它是这样的: 返回值 没有一个 如果函数无法打开文件,则会为流设置failbit状态标志(如果使用成员异常注册该状态标志,则可能引发ios\U base::failure)。 它说没有指定返回值。但在失败的情况下,会设置一个标志。我的问题是,我应该访问该标志,或者更好地问,我应该如何