Теоретические сведения. Файл– это именованная область внешней памяти, в которой хранится логически завершенный объем данных
Файл– это именованная область внешней памяти, в которой хранится логически завершенный объем данных. Файл имеет следующие характерные особенности:
· имеет имя на диске, что дает возможность программам идентифицировать и работать с несколькими файлами;
· длина файла ограничивается только емкостью диска.
Часто бывает необходимо ввести некоторые данные из файла или вывести результаты в файл. Например, бывает необходимо обрабатывать массивы, которые слишком велики, чтобы полностью разместиться в памяти.
Файлы делятся на текстовые и двоичные.
Текстовый файл – это файл, в котором каждый символ из используемого набора символов хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа «конец строки». Текстовый файл заканчивается специальным символом «конец файла».
Двоичный файл – файл, данные которого представлены в бинарном виде. При записи в двоичный файл символы и числа записываются в виде последовательности байт (в своем внутреннем двоичном представлении в памяти компьютера).
Особенностью языка С++ является отсутствие в нем структурированных файлов. Все файлы рассматриваются как неструктурированная последовательность байтов. При таком подходе понятие файла распространяется и на различные устройства.
В С++ существуют специальные средства ввода-вывода данных. Все операции ввода-вывода реализуются с помощью функций, которые находятся в библиотеке С++. Библиотека С++ поддерживает три уровня ввода-вывода:
· потоковый ввод-вывод;
· ввод-вывод нижнего уровня;
· ввод-вывод для консоли и портов (зависит от ОС).
Поток– это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.
Функции библиотеки ввода-вывода языка С++, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток представляет собой это файл вместе с предоставленными средствами буферизации.
Чтение данных из потока называется извлечением, вывод в поток – помещением (включением).
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер. Буфер накапливает байты, и фактическая передача данных выполняется после заполнения буфера (рис.). При вводе это дает возможность исправить ошибки, если данные из буфера еще не отправлены в программу.
Рис. Буферизация данных при работе с потоками
При работе с потоком можно:
· открывать и закрывать потоки (связывать указатели на поток с конкретными файлами);
· вводить и выводить строку, символ, форматированные данные, порцию данных произвольной длины;
· анализировать ошибки ввода-вывода и достижения конца файла;
· управлять буферизацией потока и размером буфера;
· получать и устанавливать указатель текущей позиции в файле.
Когда программа начинает выполняться, автоматически открываются пять потоков, из которых основными являются:
· стандартный поток ввода (на него ссылаются, используя предопределенный указатель на поток stdin);
· стандартный поток вывода (stdout);
· стандартный поток вывода сообщений об ошибках (stderr).
По умолчанию стандартному потоку ввода stdin ставится в соответствие клавиатура, а потокам stdout и stderr соответствует экран монитора.
В С++ операции с файлами можно осуществлять в двух режимах: форматированном и потоковом.
Рассмотрим основные функции для работы с файлами в форматированном режиме.
Дата добавления: 2015-02-16; просмотров: 1095;