如何在C++中检查文件是否存在?

19 浏览
0 Comments

如何在C++中检查文件是否存在?

我想确定在C++ 11中是否存在一个文件。

我有以下代码:

ifstream inputFile(c);
if (!inputFile.good()) {
        std::cout << "未找到文件" << '\n';           
}

以及

if (inputFile.peek() == std::ifstream::traits_type::eof()){
           ....
}

哪一个是正确且符合惯用法的?

0
0 Comments

如何在C++中检查文件是否存在?

如果你想使用C++11来确定文件是否存在,可以尝试以下方法:

#include 
#include 
int main(int argc, char *argv[]){
    std::ifstream file("myfile.txt");
    if(!file.is_open()){
        std::cout << "File not found" << std::endl;
        return -1;
    }
    return 0;
}

你可以尝试使用`"/etc/shadow"`或`"/etc/sudoers"`来进行测试。

虽然这只是一个常见的解决方案,但如果你的解决方案不具体,它可能并不是正确的或合适的解决方案。除非你有某种特定的目标要实现,也许问题没有被正确地提出。

实际上,这并不重要,只是一个词汇问题。我认为文件是否存在与文件是否可读是不同的。你的示例测试文件是否可读,如果失败则得出结论该文件不存在。实际上,该文件可能存在,但由于权限问题,无法被你的进程读取。所以我会说该文件是不可读的。(不是什么大问题...)

我猜是这样的,我改正了。

0
0 Comments

问题的出现原因是检查文件是否存在的需求,解决方法是使用C++17中的<filesystem>库来判断文件是否存在。

C++17中,可以通过<filesystem>库来判断文件是否存在。首先,需要引入命名空间fs = std::filesystem,然后使用fs::path定义文件路径,例如fs::path f{ "file.txt" }。接着,可以使用fs::exists()函数来判断文件是否存在,如果存在则输出"yes",否则输出"nope"。

需要注意的是,即使文件存在,也可能无法打开、读取或写入文件。另外,文件在检查返回true后的瞬间可能会被其他进程删除。

具体的代码如下:

#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
fs::path f{ "file.txt" };
if (fs::exists(f)) std::cout << "yes";
else std::cout << "nope";

0