Особенности потокового ввода-вывода в файлы
С точки зрения концепции языка С++ файлы представляют собой последовательности байтов (в С и С++ нет понятия «структурированный» или «типизированный» файл, как, например, в языке Pascal). Именно поэтому передача данных в потоки ввода-вывода осуществляется побайтно. Вместе с символами в виде байтов передаются и управляющие последовательности, такие как перевод строки ('\n' – шестнадцатеричный код 0A), возврат каретки ('\r' – шестнадцатеричный код 0D), символ конца файла (шестнадцатеричный код 1A) и другие. Операционные системы MS DOS и MS Windows рассматривают пару символов '\r\n' как один символ. Это обеспечивает читабельность содержащейся информации, так как придает определенную структуру файлу в виде строк. В системе Unix строки разделяются одним символом, который интерпретируется как new line. Таким образом, внутреннее представление текста всегда соответствует системе Unix, а внешнее – реально используемой операционной системе.
Поток в С++ можно рассматривать как отдельный класс (тип данных), который представляют объекты со схожей организацией последовательной передачи данных от источника к приемнику. Потоки ввода/вывода, такие как cin и cout, являются примерами объектов класса «поток». Список функций для работы с файловыми потоками хранится в заголовочном файле fstream.h.
В С++ предусмотрены различные режимы обмена данными в файловых потоках. Разница в организации обмена информацией заключается в наличии/отсутствии буферизации и преобразования типов данных перед помещением в поток или после извлечения из потока.
Пример 1. Программа печатает собственный код на экран и другой файл. Файл с программным кодом сохранен как Task_22.cpp.
#include <iostream.h>
#include <fstream.h>
void main(){
char character;
ifstream in_stream;
ofstream out_stream;
in_stream.open( "Task_22.cpp" );
out_stream.open( "Copy.txt" );
in_stream.get( character );
while (!in_stream.eof())
{
cout << character;
out_stream.put(character);
in_stream.get(character);
}
out_stream.close();
in_stream.close();
}
Последовательное чтение данных из файла неудобно, если требуется изменить последовательность доступа к данным. Например, прочитать последний символ или последнюю строку. Еще более трудоемкими задачами являются перестановки или сортировки данных в файле. Особенно, если при этом нельзя использовать дополнительный массив данных, в котором предполагается временно сохранить содержимое файла (например, в случае больших объемов данных).
Дата добавления: 2015-02-16; просмотров: 762;