繁体   English   中英

如果文件在C ++中为空,如何引发异常?

[英]How to throw exception if file is empty in c++?

在下面的代码中,如果文件为空,我试图打印消息,然后抛出异常。 考虑文件Text.txt为空。

    ifstream inputFile;
try 
{
    inputFile.exceptions(ifstream::eofbit);
    inputFile.open("Text.txt");
    if (inputFile.is_open()) {
        cout << "file opened"<<endl;
    }
    if (inputFile.peek()== ifstream::traits_type::eof())
    {
        cout << "file opened but it is empty or invalid 
    content" << endl;
    }
}
catch (ifstream::failure &e)
{
    cout << "Some issue with input file: " << e.what()<<endl;
    _exit(1);
}

但这会在进入if块之前引发异常(if(inputFile.peek()== ifstream :: traits_type :: eof()))我缺少什么?

当文件存在并且为空时,会发生此问题。 问题是您在以下行中的eof上启用了异常: inputFile.exceptions(ifstream::eofbit);

它打开文件,由于它是空的,因此立即设置eof标志,并且您得到异常。 如果您将此行注释掉,它将正常运行。

无论如何,我会以较短的方式编写相同的代码:

    ifstream inputFile("Text.txt");
    if (inputFile) 
    {
        cout << "file opened" << endl;
        inputFile.peek();
        if (inputFile.eof())
        {
            cout << "file opened but it is empty or invalid content" << endl;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM