Маркер EOF при генерации текстовых файлов? - PullRequest
0 голосов
/ 26 июня 2009

Когда я генерирую текстовый файл программно, я должен вставить маркер ASCII EOF (десятичное значение 26) в конце файла?

. Языки программирования .NET делают это автоматически?

Ответы [ 2 ]

5 голосов
/ 26 июня 2009

Нет. EOF создается функциями ввода-вывода ОС при чтении файла. Он не должен храниться в файле в современных системах.

2 голосов
/ 26 июня 2009

Больше нет причины для маркера ^Z EOF (и давно это не было) - это удержание от CP / M, которое не поддерживает точную длину для размеров файлов в каталоге - Размеры файлов выражены числом 128-байтовых блоков, поэтому для завершения файла на границе не 128-байтовой необходимо использовать символ EOF.

Поскольку ранние версии MS-DOS находились под сильным влиянием CP / M (и Microsoft хотела, чтобы программы CP / M легко переносились), соглашение застряло.

Ваша программа должна открывать текстовые файлы с соответствующими атрибутами, чтобы ОС и / или язык выполнения сигнализировали об EOF, когда увидят ^Z в случае, если вы столкнетесь с файлом, который использует соглашение. Но больше не нужно его писать.

Единственное возможное исключение - если у вас есть бинарный файл, но вы хотите поместить какой-то текст в его начало, затем ^Z, затем ваши данные. Если кто-то выбросит его в консоль, он скажет что-то умное, а не извергнет мусор. Не так много причин для этого, но я видел, что это делается редко.

Из Википедии (http://en.wikipedia.org/wiki/CP/M):

Размер файла был указан как число 128-байтовых записей (напрямую соответствующие секторам диска на 8-дюймовые диски) заняты файлом на диск. Не было вообще поддерживаемый способ указания точного байта размеры файлов. Текущий размер файла был сохранен в файле файла блок управления (ФКБ) по операционному система. Так как много приложений программы (такие как текстовые редакторы) предпочитают работать с файлами как с последовательностями символы, а не как последовательности записи, по соглашению текстовые файлы были завершается символом control-Z (ASCII SUB, шестнадцатеричный 1A). Определение конца текстового файла поэтому участвуют в изучении последнего запись файла, чтобы найти завершающий контроль-Z. Это также означало что вставка символа control-Z в середине файла обычно было эффект усечения текста содержимое файла.

...