为什么fin.fail()
会在以下代码中返回true
?
void loadName(){
int pointer; //holds size of file
fin.open("C:\\Users\\iAMspecial\\Desktop\\Names.txt", ios::app);
if (fin.fail()) {
cerr << "could not open intput file names.txt" << endl;
system("pause");
exit(1);
}
pointer++;
getline(fin,Names[pointer]);
for(int ndx = 0; !fin.eof(); ndx++){
pointer++;
getline(fin,Names[pointer]);
}
fin.close();
counter = pointer;
}
我在这个功能中一直在努力std::ifstream
。我已经对其他问题进行了调查,即使提出了所有建议,我似乎无法使该功能正常工作。
许多问题似乎也源于Visual Studio,但我使用的是其他IDE。如果我错过了一些非常愚蠢的东西,请提前道歉。
我已经对文件路径做了双倍肯定,它是100%正确的。我真的很难过。
输出图片:
该计划很长,但如果其中任何其他部分与我遇到的问题相关,我很乐意发布。
(另请注意,文件路径是临时的,我只是想让函数正常工作,此时我将使用不同的文件路径)。
答案 0 :(得分:3)
请改用fin.is_open()
。 fin.fail()
不用于检查流打开错误。
if (!fin.is_open()) {
cerr << "Error: " << strerror(errno);
}
此外,逐行读取文件的正确方法是
std::string line;
while (getline(fin, line)) {
// Do whatever with line
}
答案 1 :(得分:0)
每次失败的系统调用都会更新errno值。
如果要打印出错,可以提供更多信息:
cerr << "Error: " << strerror(errno);