При чтении файла я понимаю, что последний символ представлен EOF. Теперь, что происходит, когда у меня есть символ EOF
в этом файле?Как отличить символ EOF от фактического конца файла?
Как отличить «реальный» конец файла и символ EOF
?
При чтении файла я понимаю, что последний символ представлен EOF. Теперь, что происходит, когда у меня есть символ EOF
в этом файле?Как отличить символ EOF от фактического конца файла?
Как отличить «реальный» конец файла и символ EOF
?
Я решил передать свои комментарии на ответ.
У вас не может иметь «символ EOF» в вашем файле, потому что такой вещи нет. Основная файловая система знает, сколько байтов находится в файле; он не полагается на содержимое файла, чтобы знать, где находится конец.
Функции C, которые вы используете, возвращают EOF
(-1) , но это не было прочитано из файла. Это то, как функция говорит вам, что вы достигли конца. И поскольку -1 не является допустимым символом в любом наборе символов, нет путаницы.
Предполагая, что вы говорите о C, EOF
имеет значение -1, что не является символом (следовательно, нет путаницы).
Вам нужен контекст для этого вопроса. В Windows есть устаревшая концепция DOS реального символа EOF - Ctrl-Z. На самом деле невозможно сказать «реальный» из «поддельного»; файл со встроенным Ctrl-Z будет содержать некоторые скрытые скрытые данные с точки зрения программы, которая фактически ищет Ctrl-Z как конец символа файла. Не пытайтесь писать этот код больше - это не обязательно.
В портативном C API и UNIX 32-разрядный -1
используется для обозначения конца файла, который не может быть допустимым 8 или 16-битным символом, поэтому легко сказать разницу.
Erm, ок, похоже, я смутил 'EOF' и' EOT', что, по-моему, было в основном тем же. Ctrl + D часто называют «конец файла». – polemon
Вы * не можете * иметь «символ EOF» в файле. Нет такой вещи –
В DOS было, и все еще может быть в Windows. Ctrl-Z или ASCII 26. Одним из таких приложений, которое все еще создает файлы с символами EOF, является продукт WinQuery из аналитической группы. – STLDeveloper