2016-02-27 6 views
-3

Может ли записывать все 0-255 байт состояния в файл, вызывать ошибки? Поскольку байт '0' является EOF, это означает, что мой файл может содержать ровно один символ EOF?Может ли ВСЕ 256 байт состояний записываться в файл?

Редактировать: Файл может содержать ЛЮБОЙ байт 0-255, и они могут повторяться столько раз, сколько вы хотите.

Теперь я чувствую себя немым.

+3

Зависит от того, что вы подразумеваете под «ошибками». Если вы попытаетесь интерпретировать этот файл как некоторый тип файла, он, вероятно, не сработает. Но с точки зрения C++ нет ничего плохого в том, что любой из этих байтов в файле. Почему, по-вашему, байт '0' означает EOF? Потому что он используется для обозначения конца строки C? Это не одно и то же. – BoBTFish

+0

Хорошо, но что тогда EOF, если мы используем все байты, как будет помечен конец файла. Я мог бы пропустить sometinhg. – TypicalHog

+1

Нет. Я выполняю программу, которая записывает все 0-255 байт в некоторый файл почти каждый день. Эта программа называется «компилятором C++». –

ответ

5

Существует причина, по которой (в некоторых системах) текстовые файлы отличаются от «двоичных» файлов.

Насколько я знаю, нет системы, в которой запись любого байта в файл вызовет прямую проблему, но запись или чтение «любого байта» в виде текстового файла может привести к ряду проблем:

  • Некоторые байты могут быть переведены на другой байт или более одного байта - например в DOS и Windows новая строка при написании ('\n' или байт 10 (0x0a)) станет "\r\n"). И наоборот, чтение этой последовательности будет всего одним персонажем.

  • Некоторые байты или комбинации байтов при чтении можно рассматривать как «конец файла». В Windows это CTRL-Z. Происхождение этой системы маркировки конца файла специальным символом состоит в том, что некоторые операционные системы будут иметь «количество блоков» для размера файла, а не сохранять фактический размер в метаданных для файла. Это означает, что размер файла будет округлен до ближайшего блока - например, 512 байт, и если вы хотите, чтобы длина файла составляла 108 байтов, вы должны написать 108 байтов текста, а затем CTRL-Z [или что бы то ни было, что использует система], чтобы отметить, что «остальная часть этого блока не является частью текст".

Бинарных файлы могут содержать абсолютно любые байты, а если байты передаются по какому-то линии связи (например, сети), которые не могут справиться с абсолютно любой комбинацией байт, то до слоев, что сетевую ссылку, чтобы преобразовать ее в то, что работает, а затем преобразовать ее снова.