Базовые операции с файловыми потоками — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Базовые операции с файловыми потоками

2021-12-07 32
Базовые операции с файловыми потоками 0.00 из 5.00 0 оценок
Заказать работу

Наиболее общими операциями при работе с файлами являются операции открытия или создания файла, чтения или записи, установки указателя и закрытия файла. Все эти операции поддерживаются потоковыми классами. Для создания потока и связи его с конкретным создаваемым или открываемым файлом можно использовать конструктор соответствующего класса, в качестве аргументов которого указывается имя открываемого файла и, при необходимости, режим открытия, определяемый с помощью констант, описанных в классе ios. К наиболее употребительным относятся следующие режимы открытия:

ios:: binary – файл открывается в двоичном режиме. В этом случае все байты данных пересылаются в файл или из файла без всяких изменений. Следует иметь в виду, что по умолчанию все файлы открываются в текстовом режиме, в котором могут иметь место неявные преобразования байтов. Например, после кода 13 (который при выводе текстовых строк на экран или принтер обозначает возврат каретки) автоматически вставляется код 10 (перевод строки); могут происходить и потери байтов. Разумеется, такая ситуация при работе с числовыми данными недопустима, поэтому файлы с расчетными или экспериментальным данными всегда следует открывать в двоичном режиме.

ios:: app – весь вывод дописывается в конец файла. Этот режим удобен в том случае, когда полученными из какого-либо источника данными следует дополнить существующий файл.

ios:: ate – при открытии файла указатель в нем устанавливается, как и в режме ios:: app, на конец файла, однако далее вызовом функции seekp () указатель можно переместить на требуемую позицию и осуществить запись или чтение, начиная с любого байта файла (режим ios:: app не позволяет произвольно перемещать указатель).

ios:: trunc – открываемый файл усекается до нулевой длины, что приводит к потере всех содержащихся в нем данных (если указанный файл не существует, он создается заново). Для потоков вывода этот режим действует по умолчанию.

При необходимости можно указывать сразу несколько режимов, объединяя соответствующие константы с помощью операции побитового ИЛИ (|).

Приведем несколько примеров создания файловых потоков.

ofstream outpt1 (”a.dat”,ios::binary);// Создается поток

// outpt 1 для вывода в файл с именем A. DAT в двоичном режиме;

// существующий файл с таким именем затирается

ofstream outpt2 (”b.dat”,ios::binary|ios::ate);// Создается

// поток outpt 2 для вывода в конец существующего файла B. DAT

// в двоичном режиме с возможностью последующей установки

// указателя на любой байт файла

ifstream inpt (”a.dat”,ios::binary);// Создается поток inpt

              // для ввода из файла A. DAT в двоичном режиме

Для записи в файл используется функция write () базового класса ostream, для чтения – функция read () базового класса istream. Как и всегда при работе с файлами, каждая операция записи или чтения перемещает указатель в файле в конец соответствующей порции данных. Таким образом, последовательные вызовы, например, функции write () будут дополнять файл новыми данными.

Функции записи и чтения требуют в качестве первого аргумента адрес записываемых данных, приведенный к типу char *, а в качестве второго – число записываемых байтов:

int mas[100];// Массив данных (100 целых чисел по 4 байта)

short d;// Переменная с данным

ofstream strmw (”1.dat”,ios::binary);// Создаем поток

         // strmw для вывода в файл 1. DAT в двоичном режиме

strmw.write((char*)mas,400)// Записываем в 1. DAT 400 байтов

strmw.write((char*)&d,2)// Дописываем в 1. DAT еще 2 байта из d

int masin[100];// Массив для приема данных типа int

short din;// Переменная для приема данного типа short

ifstream strmr (”1.dat”,ios::binary);// Создаем поток strmr

             // для ввода из файла 1. DAT в двоичном режиме

strmr.read((char*)masin,400);// Вводим первые 400 байт в массив

strmr.read((char*)&din,2);// Вводим еще2 байта в din

Установка указателя в файле осуществляется с помощью функций seekp () (при записи) или seekg () (при чтении):

int dd[2];// Массив для приема части данных

ifstream strm (”1.dat”,ios::binary);// Создаем поток strm для

                 // ввода из файла 1. DAT в двоичном режиме

strm.seekg (100);// Устанавливаем указатель на 26-е данное

            // (пропустив 25 * 4 = 100 байтов)

strm.read((char*)dd,8);// Вводим в массив dd 26-е и 27-е данные

После окончания работы с потоком и файлом их следует закрыть функцией close ():

strm.close();// Закрывается поток strm, связанный с файлом 1. DAT

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


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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.