c признак конца файла

All | _ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

feof – проверка наличия признака конца файла.

#include
int feof (FILE *stream );

stream – указатель на управляющую таблицу потока данных к которому привязан проверяемый файл.

Ненулевое значение если обнаружен установленный признак конца файла, иначе ноль.

Функция feof проверяет наличие установленного признака конца файла. Используется для определения достижения конца файла при чтении данных из файла.

В примере из заранее созданного файла test.txt располагающегося в одной папке с программой считываются данные с помощью функции fgetc, пока не будет достигнут конец файла. Признак конца файла определяется с помощью функции feof. В файле заранее сохранена строка: «тест чтения». Считанные данные и отчет о работе выводятся на консоль

Открытие файла: выполнено
Коды считанных символов:
212 197 211 212 32 222 212 197 206 201 209
Чтение файла закончено
Закрытие файла: выполнено

Обычной файловой операцией в ваших программах является чтение содержимого файла, пока не встретится конец файла. Чтобы определить конец файла, ваши программы могут использовать функцию еоf потокового объекта. Эта функция возвращает значение 0, если конец файла еще не встретился, и 1, если встретился конец файла. Используя цикл while,ваши программы могут непрерывно читать содержимое файла, пока не найдут конец файла, как показано ниже:

При использовании кода

в C++ получаются неприятности — лишняя считанная строка, например. Почему? Как правильно проверить, что достигнут конец файла?

2 ответа 2

Признак достижения конца файла выставляется только после неудачной попытки чтения за его концом. Поэтому, если в теле цикла нет проверки, успешно ли выполнено чтение из файла — последнее чтение окажется именно тем неудачным чтением, которое выставит признак достигнутого конца файла (а для вас это будет выглядеть как, например, еще раз считанная последняя строка, если она находилась в буфере для чтения).

Лучше в заголовке цикла while выполнять само чтение с проверкой — например, в программе на C это могло бы выглядеть как

или на C++ — наподобие

Также помимо флага eof после чтения всего файла может также выставиться флаг fail, и если мы захотим установить курсор на начало fin.seekg(0, fin.beg), то ничего не прочитаем, т.к. флаг fail не сброшен. Сбросить можно с помощью fin.clear(). Текущее состояние можно вывести fin.rdstate():

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ c файлы обработка-ошибок или задайте свой вопрос.

Связанные

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

Оцените статью