Особенности потокового ввода-вывода в файлы

С точки зрения концепции языка С++ файлы представляют собой последовательности байтов (в С и С++ нет понятия «структурированный» или «типизированный» файл, как, например, в языке 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; просмотров: 717;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.