чтение файла: feof () для двоичных файлов - PullRequest
3 голосов
/ 05 июля 2010

Я читаю двоичный файл. и когда он достигнет конца. кажется, это завершается функцией feof (). потому что в двоичных файлах нет символа EOF? если так, как я могу решить это.

В настоящее время мой код использует цикл while

while (!feof(f))

когда он достигает конца файла в позиции 5526900. он не останавливается. он просто пытается читать, и я застрял в цикле.

Может кто-нибудь сказать мне, почему и как это решить.

Спасибо

1 Ответ

22 голосов
/ 05 июля 2010

Вы не должны использовать feof () для включения - вместо этого используйте возвращаемое значение цикла fread () - пока он не вернет ноль.Это легко увидеть, если вы рассматриваете чтение пустого файла - feof () возвращает состояние EOF ПОСЛЕ операции чтения, поэтому он всегда будет пытаться читать поддельные данные, если используется в качестве элемента управления циклом.

Я неНе знаю, почему так много людей думают, что feof () (и член eof () потоков C ++) могут предсказать, будет ли следующая операция чтения успешной, но, поверьте, они не могут.

...