【发布时间】:2014-08-16 13:59:55
【问题描述】:
我不明白是什么在我的输入文件流中引发了异常。我以前做过几乎完全一样的事情,没有任何问题。
std::string accnts_input_file = "absolute_path/account_storage.txt";
std::string strLine;
std::ifstream istream;
istream.exceptions( std::ifstream::failbit | std::ifstream::badbit );
try
{
istream.open( accnts_input_file.c_str() );
while( std::getline( istream, strLine ) )
{
std::cout << strLine << '\n';
}
istream.close();
}
catch( std::ifstream::failure &e )
{
std::cerr << "Error opening/reading/closing file" << '\n'
<< e.what()
<< std::endl;
}
我只让它打印它现在读取的行来尝试跟踪错误。它逐行读取文件并打印它们,然后抛出异常。异常说 basic_ios::clear,我不明白。我认为抛出异常的是 ifstream::failbit ,因为当我只设置 ifstream::badbit 时它不会抛出异常,但我不知道为什么。我也尝试过“while(!istream.oef())”和大多数其他方法,而不是“while(std::getline(istream, strLine))”,但我一直收到同样的错误。
我确定这可能是我明显遗漏的东西,但我们将不胜感激。谢谢
【问题讨论】:
-
到达 EOF 时对
std::getline( istream, strLine )的最后一次调用可能会设置istream的故障位。 -
为什么不尝试从异常中打印更多信息?例如,使用
what成员函数。 -
您可以尝试在您的
catch中打印e.what()。 -
@πάντα ῥεῖ - 如果达到 eof,它不会抛出 eofbit 吗?
-
当我将 e.what() 放入 catch 语句时,它给了我 basic_ios::clear。我不明白,我想清楚刚刚清除了你的标志