我有一个函数 (addShape
) 可以根据它获取的 id
从文件中读取整数。它获取 id
和流 is
作为参数。出于某种原因,我在阅读最后一行后遇到了 std::ios_base::failure
问题。
while (is >> id)
addShape(id, is, false);
我认为这是从文件中读取最安全的方法。
这是我初始化流的方式:
fstream is;
int id = 0;
string filename;
char answer = NULL;
// set exceptions
is.exceptions(fstream::failbit | fstream::badbit);
try { is.open(filename); }
catch (ifstream::failure e)
{
clrscr();
cout << "There was an error opening " << filename << endl;
waitForEscape();
is.close();
return;
}
最佳答案
当您创建流时,请注意,只要设置了 failbit
,您就会打开异常:
// set exceptions
is.exceptions(fstream::failbit | fstream::badbit);
这意味着只要流操作设置了failbit
,流就会抛出异常。
现在,看看这段代码:
while (is >> id)
addShape(id, is, false);
在某些时候,读取 is >> id
会失败,这可能是因为您用完了数据,也可能是因为数据格式错误。当发生这种情况并关闭异常时,这将通过设置 failbit
并使 is >> id
评估为 false
来失败,从而停止循环。但是,在打开异常的情况下,当在这种情况下设置failbit
时,它会抛出异常。
看你想做什么
- 没有为
failbit
设置异常,当出现错误时会导致循环停止运行,或者 - 围绕
while
循环设置显式异常处理程序。
希望这对您有所帮助!
关于c++ - 为什么这个文件读取代码会产生异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939731/