Поделиться через


Текстовые и двоичные потоки

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

Таким образом, перемещение в текстовом потоке ограничено. Можно получить текущий индикатор позиции файла с помощью fgetpos или ftell. Можно указывать позицию в текстовом потоке относительно позиции, полученной таким образом, или относительно начала или конца потока путем вызова fsetpos или fseek. Любое другое изменение позиции может не поддерживаться.

Для максимальной переносимости программа не должна писать следующее.

  • Пустые файлы.

  • Пробелы в конце строки.

  • Частичные строки (опустив NL в конце файла).

  • символы, отличные от печатных символов, NL и HT (горизонтальной табуляции).

При выполнении этих правил последовательность символов, считываемых из текстового потока (как однобайтовые или многобайтовые символы) будет соответствовать последовательности символов, записанной в текстовый поток при создании файла. В противном случае библиотечные функции могут удалить создаваемый файл, если файл пуст в момент закрытия. Либо они могут изменять или удалять символы, записываемые в файл.

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

Таким образом, позиционирование в двоичном потоке хорошо определено, за исключением позиционирования относительно конца потока. Можно получить и изменить текущий индикатор позиции файла тем же образом, что и для текстового потока. Кроме того, смещения, используемые ftell и fseek, подсчитывают байты с начала потока (байт номер ноль), поэтому целочисленная арифметика на этих смещениях приводит к предсказуемым результатам.

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

См. также

Ссылки

Файлы и потоки