【问题标题】:How to check if a file exists in C++? [duplicate]如何检查文件是否存在于 C++ 中? [复制]
【发布时间】:2020-03-20 05:05:59
【问题描述】:

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

我有以下代码:

ifstream inputFile(c);

if (!inputFile.good()) {
        std::cout << "No file found" << '\n';           
}

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

哪一个是正确的和惯用的?

【问题讨论】:

  • 您使用的是哪个版本的 C++(c++11c++14、...)?建议的/“最惯用的”解决方案可能会有所不同。
  • @druckernamly 已编辑,c++ 11
  • 只是提一下:如果你可以访问 C++17,那么std::filesystem::exists 就在那里。
  • 我猜你的意图是检查文件是否可以被你的进程读取。这与仅测试此文件是否存在有点不同;它可能存在,但您的进程可能无法读取其内容(权限...)。
  • 第一个看起来更好。为什么要检查任意文件相关函数是否返回错误,如果可以直接检查文件是否正确打开。

标签: c++ c++11


【解决方案1】:

如果您尝试使用 C++11 确定文件是否存在,您可能想尝试这个想法

#include <iostream>
#include <fstream>

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" ;^)
  • 虽然这只是一个常见的解决方案,但如果您的解决方案不具体
  • 好的,我会试试的
  • std::basic_ios::good 在最近完成 IO 操作时返回 true,并且可能不是正确或正确的解决方案。除非您有一些想要实现的目标,并且可能没有正确提出问题。
  • 这并不重要,只是词汇的问题。我认为文件存在与否这一事实与该文件是否可读这一事实不同。您的示例测试文件是否可读,如果失败,则断定找不到该文件。您的进程可能实际找到但不可读(由于权限)。所以我会说这个文件不是“可读的”。 (没什么大不了的......)
【解决方案2】:

在 C++17 中,您可以使用 &lt;filesystem&gt; 进行操作:

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

【讨论】:

    猜你喜欢
    • 2018-09-27
    • 2013-09-19
    • 2013-06-04
    • 2011-10-17
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2014-03-06
    • 2016-06-09
    相关资源
    最近更新 更多