Текстовые и бинарные файлы и файловые потоки

Различают текстовые и бинарные (двоичные) файлы и, соответственно, текстовые и бинарные файловые потоки.

Предполагается, что текстовые файлы состоят из символов и могут разделяться на строки. Любой символ в файле представляется соответствующим ему числовым кодом. Признаком перехода на следующую строку является символ '\n' с числовым кодом 10, именно это значение (10) вводится в стандартный входной поток при нажатии клавиши Enter клавиатуры. Этот символ при физической записи файла на диск во многих операционных системах (в частности, Windows) обычно заменяется парой символов с кодами 13 и 10 (шестнадцатеричные значения – 0D, 0A (“возврат каретки” и “прогон бумаги”)). При вводе в поток происходит обратное преобразование. Указанная замена может быть обнаружена при просмотре текстового файла какой-нибудь из программ, обеспечивающих побайтовый просмотр кода. Это преобразование сказывается на физической длине файла. Так, длина файла из трех 20-символьных строк будет 64 или 66 байтов, в зависимости от того, ставился ли явно признак перехода на следующую строку в конце последней строки. Именно текстовые файлы создаются и просматриваются простыми текстовыми редакторами.

Числа хранятся в текстовых файлах в виде соответствующих последовательностей символов.

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

Бинарные файлы не предназначены для просмотра текстовыми редакторами, для них не предусмотрено разделение на строки. Символ '\n' записывается в бинарный файл как обычное однобайтовое значение 10 (шестнадцатеричное 0A). Длина бинарного файла совпадает с числом байтов, выведенных в поток при формировании данного файла, хотя в некоторых реализациях в бинарных файлах могут содержаться дополнительные нулевые значения для выравнивания записей, например, на границу сектора на диске. Очень часто бинарные файлы содержат данные одного и того же типа, например, только числа определенной длины или структуры определенного формата, что позволяет легко перемещаться к требуемым элементам данных.

Следует отметить, что открытие файла с указанием флага ios::binary определяет только действия, связанные с трактовкой значения 10 при работе с файлом, способ же хранения информации в файле определяется теми методами, которые применяются при формировании этого файла. “Распознать” тип существующего файла по расширению его имени нельзя, поскольку оно определяется программистом при создании файла и в общем случае может быть любым. Так, ничто не запрещает присвоить расширение .txt бинарному файлу, хотя желательно при именовании файла подчеркивать расширением его содержание.