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

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

苍轶
2023-03-14

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

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

共有3个答案

茅秦斩
2023-03-14

我使用这段代码,到目前为止,它对我来说还可以。这并没有使用C的许多奇特功能:

bool is_file_exist(const char *fileName)
{
    std::ifstream infile(fileName);
    return infile.good();
}
丰飞龙
2023-03-14

备注:在C 14中,一旦完成并采用文件系统TS,解决方案将是使用:

std::experimental::filesystem::exists("helloworld.txt");

自C 17以来,只有:

std::filesystem::exists("helloworld.txt");
屠振濂
2023-03-14

我编写了一个测试程序,每种方法都运行了100000次,其中一半对存在的文件运行,另一半对不存在的文件运行。

#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、C++或C中。我有数千个文件,在对它们进行操作之前,我需要检查它们是否全部存在。在下面的函数中,我可以写什么来代替?

  • 现代C编译器支持一些或全部的ANSI提议的标准C。无论何时可能的话,尽量用标准C编写和运行程序,并且使用诸如函数原型,常量存储以及volatile(易失性)存储等特性。标准C通过给优化器提供有有效的信息以提升程序的性能。标准C通过保证所有编译器接受同样的输入语言以及提供相关机制隐藏机器相关内容或对于那些机器相关代码提供警告的方式提升代码的可移植性。 17.1 兼容性 编写很容易移植到老编译器上的代

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

  • 本文向大家介绍使用Bash Shell检查文件是否存在的方法,包括了使用Bash Shell检查文件是否存在的方法的使用技巧和注意事项,需要的朋友参考一下 前言 大家在工作的时候可能经常会遇到这样的需求,在类Unix系统的Bash环境下,怎样检查文件是否存在呢?既然有需求,当然就有解决的办法了,Shell中的test命令,可以用来检测文件的类型或者比较数值是否相等,该命令也能用来检查文件是否存在。

  • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

  • 问题内容: 知道列表中是否存在值(列表中包含数百万个值)及其索引是什么的最快方法是什么? 我知道列表中的所有值都是唯一的,如本例所示。 我尝试的第一种方法是(在我的实际代码中为3.8秒): 我尝试的第二种方法是(速度提高2倍:我的真实代码为1.9秒): 堆栈溢出用户建议的方法(我的实际代码为2.74秒): 在我的真实代码中,第一种方法花费3.81秒,第二种方法花费1.88秒。这是一个很好的改进,但