ДВОИЧНЫЕ




ДВОИЧНЫЕ ФАЙЛЫ (запись информации) Пример Строка 3 Комментар 1 void программы: main() ии: Объявление переменных, предназначенных для хранения 2 { количества строк ( kol ) и количества символов в каждой 3 int len, kol=4; строке (len). 4 ofstream file; Строка 4 5 char str[4][50]={"Наша таня громко плачет: ", Создание выходного потока file. 6 "Уронила в речку мячик", Строки 5 -8 7 "-Тише, танечка, не плачь: ", Объявление и инициализация двумерного строкового 8 "Не утонет в речке мяч. "}; массива str. 9 file. open("file. bin", ios_base: : binary); Строка 9 10 file. write((char *)&kol, sizeof(int)); Открытие бинарного (флаг binary) файла file. bin для записи. 11 for(int i=0; i<4; i++) Строка 10 12 { Запись в начало файла количества строк (kol). 13 len = strlen(str[i]); В цикле 4 раза (строка 11): 14 file. write((char *)&len, sizeof(int)); Строка 13 15 file. write(str[i], len); Определяется количество символов в каждой строке (len). 16 } Строка 14 17 file. close(); Записывается количество символов в каждой строке. 18 } Строка 15 Записывается текст соответствующей строки. Строка 17 Из примера видно, что бинарный файл " file. bin. Закрытие файла имеет следующий формат: kol len str[0] len str[1] len str[2] len str[3] 4 байта len байт 4 байта len байт Строка 0 1 2 3 10 итерация Цикл 1
ДВОИЧНЫЕ ФАЙЛЫ (чтение информации) Пример Строка 3 Комментар void программы: Объявление переменных, предназначенных для 1 main() хранения ии: 2 { 3 int len, kol; количества строк ( kol ) и количества символов в каждой 4 ifstream file; строке (len). 5 char str[4][50]={0}; Строка 5 6 setlocale(LC_CTYPE, "rus"); Объявление и инициализация двумерного строкового 7 file. open("file. bin", ios_base: : binary); массива str. 8 file. read((char *)&kol, sizeof(int)); Строка 6 9 for(int i=0; i
ДВОИЧНЫЕ ФАЙЛЫ (средства произвольного доступа к файлам) Функции позиционирования в потоках данных С++ Функция Описание Возвращает текущую позицию чтения в виде значения tellg() типа pos_type seekg(pos) Устанавливает абсолютную позицию чтения seekg(offset, rpos) Устанавливает относительную позицию чтения Возвращает текущую позицию записи в виде значения tellp() типа pos_type seekp(pos) Устанавливает абсолютную позицию записи seekp(offset, rpos) Устанавливает относительную позицию записи В версиях функций с относительным позиционированием смещение задается по отношению к трем позициям, для которых определены соответствующие константы: Константа Описание Смещение задается относительно начала beg файла Смещение задается относительно текущей cur позиции 3 Смещение задается относительно конца
ДВОИЧНЫЕ ФАЙЛЫ (примеры произвольного доступа к файлам) – показывает текущую позицию файла ifstream i. File; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 pos_type pos = i. File. tellg(); Функция tellg() возвращает значение 4 (аналогично работает функция tellp() ) ifstream i. File; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 i. File. seekg(9); Позиционирование в позицию 9 (функция seekg()) (аналогично работает функция seekp() ) ifstream i. File; i. File. seekg(3, ios: : cur); 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Позиционирование относительно текущей позиции в позицию 12 (текущая позиция – 9 ) (аналогично работает функция seekp(3, ios: : cur) ) 4

