Работа с файловыми потоками в С++. Двоичные файлы.

Лабораторная работа №14

Работа с файловыми потоками в С++.
Двоичные файлы.

Цель работы: получить практические навыки решения задач с использованием двоичных файлов на языке С++.

Теоретические сведения

Cохранение данных в двоичных файлах.

Для того, чтобы открыть двоичный файл, необходимо задать режим доступа ios::binary (в некоторых компиляторах С++ - ios::bin). Двоичные файлы более компактны и в некоторых случаях более удобны для… Для создания выходного файла создают объект

Пример 14.3.

Объявим структуру

struct mountine {

char name[20]; //название горы

int altitude; //высота над уровнем моря

int complicate; //сложность

};

mountine mount;

Для сохранения информации в двоичном файле выполняют следующее:

ofstream fil_out(“mountines.txt”, ios_base::app);

fil_out << mount.name << “ “ << mount.atitude << ‘.’ << mount.complicate <<”n”;

Для сохранения той же информации в двоичном файле выполняют следующее:

ofstrem fil_out(“mountines.dat”, ios_base::app | ios_base::bynary);

fil_out.write((char *) &mount, sizeof(mountine));

Метод write копирует указанное число байтов (в данном случае – sizeof(mountine)) в файл из памяти ЭВМ. Несмотря на то, что сохранение данных происходит в двоичном файле, адрес переменной преобразуется к указателю на тип char.

Для чтения данных из двоичного файла используют метод read:

ifstream fil_in(“mountines.dat”, ios_base::binary);

fil_in.read((char *) &mount, sizeof(mountine));

При записи или чтении классов, не содержащих виртуальных функций, можно использовать тот же самый подход. Чтобы сделать класс потоковым, нужно перегрузить операторы << и >>:

friend ostream &operator<<(ostream &, AnyClass &);

friend istream &operator>>(istream &, AnyClass &);

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

Каждый файл имеет два связанных с ним значения: указатель чтения и указатель записи, по-другому называемые файловым указателем или текущей… При последовательном доступе к элементам файлов перемещение файлового… - seekg() – установить текущий указатель чтения;

Требования к отчету.

- наименование и цель работы; - краткие теоретические сведения; - формулировку задания своего варианта;

Лабораторное задание.

Для выполнения лабораторной работы необходимо составить программу согласно своему варианту задания.

Варианты заданий

Номер варианта Задание
1, 14 В двоичном файле целого типа заменить максимальный элемент суммой предыдущих элементов, минимальный – суммой последующих элементов.
2, 15 В конец двоичного файла целого типа дописать четные элементы этого файла
3, 16 В начало двоичного файла целого типа дописать нечетные элементы этого файла.
4, 17 В середину двоичного файла целого типа поместить элементы этого файла, кратные пяти.
5, 18 В двоичном файле целого типа поменять местами элементы, стоящие на четных местах с элементами, стоящими на нечетных местах.
6, 19 В начало двоичного файла целого типа дописать его минимальное значение, в середину – максимальное.
7, 20 В начало двоичного файла целого типа записать элементы, являющиеся делителями максимального элемента этого файла.
8, 21 В середину двоичного файла целого типа записать элементы этого файла, меньшие числа, введенного с клавиатуры.
9, 22 Даны двоичные файлы f и g целого типа. Записать в начало файла f положительные компоненты файла g, а в конец файла g – отрицательные компоненты файла f с сохранением порядка их следования.
10, 23 Дан двоичный файл с целыми числами. Удалить из него число, записанное после первого нуля (принять, что нули в файле имеются). Результат записать в другой файл.
11, 24 Дан двоичный файл с целыми числами. Все его четные элементы заменить нулями. Рассмотреть 2 варианта: - исходный файл содержит 13 чисел; - размер исходного файла неизвестен.
12, 25 Дан двоичный файл с целыми числами. Заменить все его элементы, порядковый номер которых кратен 7, на новые значения, которые вводятся с клавиатуры. Рассмотреть 2 варианта: - исходный файл содержит 20 чисел; - размер исходного файла неизвестен.
13, 26 Дан двоичный файл с положительными и отрицательными целыми числами. Записать в другой файл сначала отрицательные элементы, а затем положительные.