如何检查文件是不是存在于 C++ 中? [复制]

Posted

技术标签:

【中文标题】如何检查文件是不是存在于 C++ 中? [复制]【英文标题】: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 就在那里。 我猜你的意图是检查文件是否可以被你的进程读取。这与仅测试此文件是否存在有点不同;它可能存在,但您的进程可能无法读取其内容(权限...)。 第一个看起来更好。为什么要检查任意文件相关函数是否返回错误,如果可以直接检查文件是否正确打开。 【参考方案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";

【讨论】:

以上是关于如何检查文件是不是存在于 C++ 中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查文件是不是存在(无论其文件类型如何)? [复制]

File 是不是存在于 Python 中? [复制]

当用户在flutter中使用otp方法登录时,如何检查用户详细信息是不是已经存在于firebase中? [复制]

如何使用 fstream::open() 检查 C++ 中是不是存在文件

如何检查python中是不是存在文件? [复制]

Sql Server 2008如何检查表中是不是存在列? [复制]