我正在处理一些已经提供的代码。有一个包含 2 个 fstream.fails() 的 if 语句。代码不断返回 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,因为这是提供的代码,但我不确定是否需要添加一些东西来获得预期的结果。
最佳答案
来自ios::fail文档:
true if badbit (Read/writing error on I/O operation) and/or failbit (Logical error on i/o operation) are set.
这表明至少两个文件之一没有打开成功。
问题不在代码中,问题在于您的程序试图打开可能找不到的文件(或者它没有权限)。
将文件复制到与您的可执行文件相同的工作区(文件夹),然后重试。
关于c++ - 为什么 fstream.fail() 会返回 true 或 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55548823/