c++ - 文件无法打开,即使 stat() 可以找到它

标签 c++ file-io stat

我有一个 C++ 文档,我需要在其中打开一个文件。我没有使用相对路径来引用我的文件。我目前正在使用硬盘驱动器上的完整文件路径,不过稍后我将切换为仅使用当前目录。在任何情况下,我都知道这个文件被正确引用并且可以打开,因为我已经对文件名执行了 stat() 并且它返回了关于该文件的所有正确信息。这是正在发生的基本过程:

string fName = "C:\\Users\\[user]\\Downloads\\file.DAT";
ifstream inFile;
inFile.open(fName);

struct _stat buf;                        // I put these lines here to test that
int result = _stat(fName.c_str(), &buf); // the file is being referred-to right

inFile >> levelnumber;
if(inFile.fail())  // inFile.fail() keeps evaluating to TRUE
    ThrowError("Corrupt or inaccesible .DAT file."); // I wrote ThrowError

无论如何,inFile.fail() 一直评估为真,即使文件肯定被正确引用(这就是调用 _stat() 检查的内容)。

我做错了什么? :P

最佳答案

您的测试不会告诉您文件是否可以打开。您的测试告诉您的是文件无法打开或 levelnumber 无法读取。要测试您的文件是否已打开,您可以在调用 open() 后立即检查文件。如果文件确实可读,它应该转换为 true:

std::ifstream inFile(fName);
if (!inFile) {
    std::cerr << "failed to open '" << fName << "' for reading\n";
}

关于c++ - 文件无法打开,即使 stat() 可以找到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009697/

相关文章:

c++ - 中断创建arduino库

c++ - 在 vector 上使用 strcmp

Java - 文件读/写

linux - 如何从 fs.Stats 对象中找出文件是否存在?

python - 获取根据修改日期排序的文件夹列表

c# - 以编程方式启用录音设备

C++ Vim clang complete 如何让 qt 自动完成?

Python:读取一行并写回同一行

vba - Visual Basic,检查另一个工作簿中是否存在工作表

mysql - sas如何计算case语句的值