捕获istream忽略的(eof-)异常

Catching (eof-)exception of istream ignore

本文关键字:eof- 异常 istream 捕获      更新时间:2023-10-16

我遇到了一个小问题。我想跳过文件中的一些行。我正在使用

        for(int i=0; i < ln -1; ++i)
        {
            ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'n');
        }

在cplusplus.com上写着,如果达到eof, ignore将抛出异常。但是我不能用试/接的方法得到它。我做错了什么?还是我读错了什么?

我需要的是,如果达到eof,我想再次从第一行开始执行一些操作。

所以我尝试了某事,但它没有工作:

        for(int i=0; i < ln -1; ++i)
        {
            try
            {
                ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'n');
            }
            catch(exception e)
            {
                if(ifFile.eof())
                {
                    ifFile.clear(ifFile.eofbit);
                    ifFile.seekg(std::ios::beg);
                    _readCounter.currLine = 1;
                }
            }
        }

但是没有遇到catch()

如果有问题,请提出来。

纠正:

        for(int i=0; i < ln; i++)
        {
            if(ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'n').eof())
            {
                ifFile.clear(ifFile.eofbit);
                ifFile.seekg(std::ios::beg);
            }
        }

调用ignore()后检查eof():

if (f.ignore(std::numeric_limits<std::streamsize>::max(), 'n').eof()) {
    // end of file was found
}