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

时间:2012-12-23 08:41:32

标签: 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()继续评估为true,即使文件肯定正确引用(这是对_stat()的调用检查)。

我做错了什么? :P

1 个答案:

答案 0 :(得分:3)

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

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