我有一个函数(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;
}
答案 0 :(得分:4)
当您创建流时,请注意,只要设置了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
循环设置显式异常处理程序。希望这有帮助!