读取txt数据 - 创建目录c++




检查C++中是否存在文件的最佳方法是什么?(跨平台) (6)

我已经阅读了什么是检查C中是否存在文件的最佳方法的答案 (跨平台) ,但我想知道是否有更好的方法来使用标准的c ++库? 最好不要试图打开文件。

stataccess都非常不可用。 我应该#include使用这些?


access怎么样?

#include <io.h>

if (_access(filename, 0) == -1)
{
    // File does not exist
}

没有boost ,这将是一个矫枉过正

使用stat() (尽管pavon提到的不是跨平台),如下所示:

#include <sys/stat.h>
#include <iostream>

// true if file exists
bool fileExists(const std::string& file) {
    struct stat buf;
    return (stat(file.c_str(), &buf) == 0);
}

int main() {
    if(!fileExists("test.txt")) {
        std::cerr << "test.txt doesn't exist, exiting...\n";
        return -1;
    }
    return 0;
}

输出:

C02QT2UBFVH6-lm:~ gsamaras$ ls test.txt
ls: test.txt: No such file or directory
C02QT2UBFVH6-lm:~ gsamaras$ g++ -Wall main.cpp
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out
test.txt doesn't exist, exiting...

另一个版本(和那个)可以在here找到。


另一种可能性是在流中使用good()函数:

#include <fstream>     
bool checkExistence(const char* filename)
{
     ifstream Infield(filename);
     return Infield.good();
}

如果跨平台足以满足您的需求,请使用stat()。 它不是C ++标准,而是POSIX。

在MS Windows上有_stat,_stat64,_stati64,_wstat,_wstat64,_wstati64。


我是一个快乐的推动用户,肯定会使用Andreas的解决方案。 但是,如果您无法访问boost库,则可以使用流库:

ifstream file(argv[1]);
if (!file)
{
    // Can't open file
}

它不像boost :: filesystem :: exists那么好,因为文件实际上会被打开...但是那通常是你想要做的下一件事。






file-io