Файлы. Общая концепция организации ввода-вывода данных в С++. Средства класса ios, обеспечивающие точную настройку вывода, страница 12

seekp(pos) – устанавливает текущую позицию записи в значение pos относительно начала файла;

seekp(pos, seek_dir) – перемещает текущую позицию файлового указателя на pos байтов, считая от одной из трех позиций, определяемых параметром seek_dir: ios::beg (от начала файла), ios::cur (от текущей позиции), ios::end (от конца файла);

tellр() – возвращает позицию указателя файла (в байтах).

Общие принципы работы с файлами

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

Для управления множеством файлов в состав операционной системы входит файловая система, определяющая, каким образом файлы именуются и где они размещаются. Представление имен файлов в Windows  и в программе на С++:

o  для имени файла нельзя использовать символы < > : “ |; имена могут содержать пробелы и символы кириллицы; имена нечувствительны к регистру, однако регистр в именах сохраняется (имя file == FILE ==File); расширение в имени файла может отсутствовать;

o  полное имя файла включает путь к файлу (идентификатор диска и имя каталога, где находится файл); вложенные каталоги отделяются друг от друга символом-разделителем; по традиции в Windows это символ обратной косой черты (\); в программе на С++ этот символ необходимо писать дважды (т.к. он является специальным символом), однако допускается использовать и обычную косую черту (/): “qwest.txt”, “c:\\test\\qwest.doc”, “d:/number.bin”;

o  в программе на С++ имя файла обычно представляется либо константой-строкой, либо переменной – символьным массивом, в который помещается строка-имя файла; тип string использовать нельзя;

Для реализации файлового ввода-вывода, необходимо включить в программу заголовок  <fstream.h>, в котором определено несколько классов, включая классы ifstream,  ofstream и fstream. Классы ifstream, ofstream, fstream (как производные от классов istream, ostream и iostream соответственно), наследуют перегруженные операции << и  >>, флаги форматирования, манипуляторы, методы, состояние потоков и т.д.

Файл может быть открыт для чтения (входной файл), для записи (выходной файл), для чтения и записи (двунаправленный обмен).

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

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

Текстовые файлы предназначены для хранения текстовой информации. Информация в тестовом файле представлена в кодах ASCII., включая расширенные и управляющие коды. Любую информацию (числа, символы или строки) текстовый файл хранит в виде символов, её изображающих. Текстовый файл рассматривается как последовательность символов, разбитая на строки. Каждая строка завершается символом новой строки. В программе на С++ этот символ обозначается как ‘\n’. В системе Windows строки в текстовом файле завершаются комбинацией двух байтов \r\n («возврат каретки/перевод строки» – последовательность кодов ASCII 0x0D0A: 0D - 13(CR) и 0A -10(LF)), поэтому при операциях ввода-вывода для текстовых файлов система выполняет преобразование (для ввода – последовательность символов «возврат каретки/перевод строки» превращается в символ новой строки – ‘\n’(LF); для вывода – каждый символ новой строки ‘\n’(LF) преобразуется в пару CR, LF). Если же файл открывается в двоичном режиме, такое преобразование не выполняется.

Строки текстового файла могут иметь разную длину. Доступ к каждой строке возможен лишь последовательно, начиная с первой. Именно в файлах такого типа хранятся исходные тексты программ. Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только ёмкостью устройств внешней памяти. В конце создаваемого файла  ставится признак EOF (End Of File – конец файла –ASCII-код 26).