Перехват (eof-) исключения istream ignore

У меня небольшая проблема. Я хочу пропустить некоторые строки в файле. банкомат, которым я пользуюсь

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

На cplusplus.com написано, что ignore выдает исключение, если eof достиг. Но я не могу получить это с помощью try/catch. Что я сделал не так? Или я что-то неправильно прочитал?

Что мне нужно, так это то, что я хочу снова начать с первой строки для некоторых операций, если достигнут 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);
            }
        }

person dominic.e    schedule 07.05.2014    source источник
comment
Вы должны установить маску исключения (как описано в эта ссылка)?   -  person Some programmer dude    schedule 07.05.2014
comment
По умолчанию потоки ввода-вывода не используют исключения, вместо этого они имеют состояния сбоя. И, как правило, не рекомендуется настраивать iostream для использования исключений именно из-за обработки EOF. Потоки на самом деле не предназначены для использования исключений для отчетов об ошибках.   -  person Cheers and hth. - Alf    schedule 07.05.2014
comment
но как я могу получить eofbit, если игнорирование (должно) быть установлено в EOF? if(ifFile.eof()) не работает сразу после ifFile.ignore(...)   -  person dominic.e    schedule 07.05.2014


Ответы (1)


Просто проверьте eof() после вызова ignore():

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