什么在这个文件流中抛出异常?

ana*_*acy 6 c++ ifstream

我不明白我的输入文件流在这里抛出了什么异常.我之前做过几乎完全没有任何问题.

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;
}
Run Code Online (Sandbox Code Playgroud)

我只是打印它现在读取的行来尝试跟踪错误.它逐行读取文件并打印它们,然后抛出异常.例外是basic_ios :: clear,我不明白.我认为ifstream :: failbit是抛出异常,因为当我只设置ifstream :: badbit时它不会抛出异常,但我无法弄清楚原因.我也试过'while(!istream.oef())'和大多数其他方法,而不是'while(std :: getline(istream,strLine))',但我一直得到同样的错误.

我敢肯定这可能是我想念的东西,但任何帮助都会受到赞赏.谢谢

Som*_*ude 8

这个std::getline参考:

...
a)输入的文件结束条件,在这种情况下,getline设置eofbit.
...
3)如果由于某种原因没有提取任何字符(甚至没有丢弃的分隔符),则getline设置failbit并返回.

这意味着,对文件结束的条件,功能设置 eofbitfailbit.当你要求failbit设置异常时,库会引发异常.