为什么fstream.fail()返回true或false

时间:2019-04-06 11:55:56

标签: c++

我正在使用已经提供的一些代码进行一些工作。有一个if语句,其中包含2个fstream.fails()。该代码不断返回true,我不确定这是由于所提供的代码存在问题还是缺少某些内容。

我四处搜寻以试图更好地理解可能发生的事情,但是由于我是C ++的新手,所以我发现很难找到一个答案来帮助我理解可能发生的事情。

我认为可能存在问题的提供的代码。

bool Navigation::BuildNetwork(const string &fileNamePlaces, const string &fileNameLinks)
{
    fstream finPlaces(fileNamePlaces);
    fstream finLinks(fileNameLinks);
    if (finPlaces.fail() || finLinks.fail()) return false;
    ifstream();

    // Add your code here   
}

其中称为“构建网络”功能的地方

ACW_Wrapper wrapper("log.txt");

    // Build Navigation
    wrapper.startTimer();
    Navigation nav;
    if (nav.BuildNetwork("Places.csv", "Links.csv")) {
        const auto elapsed = wrapper.stopTimer();
        std::cout << std::fixed << std::setprecision(1) << "BuildNetwork - " << elapsed << " microseconds" << std::endl;
    }
    else {
        std::cout << "\n*** Error *** BuildNetwork" << std::endl;
    }

由于提供了此代码,因此我希望它返回false,但是我不确定是否需要添加一些可以达到预期结果的东西。

1 个答案:

答案 0 :(得分:0)

摘自ios::fail文档:

  

如果设置了badbit(I / O操作上的读/写错误)和/或failbit(I / O操作上的逻辑错误),则为true。

这表明两个文件中的至少一个没有成功打开。

问题不在代码中,问题在于您的程序试图打开可能找不到的文件(或它没有权限)。

将文件与可执行文件复制到同一工作区(文件夹),然后重试。