11.4 Двоичные файлы
Открыть файл как
двоичный (binary) означает, что из файла можно прочитать и записать любую
информацию - числа, строки, битовые поля и т.д. Для того чтобы открыть файл как
двоичный в функции fopen необходимо указать двоичную моду (суффикс b). Далее,
используя, функции fwrite и fread производится запись и чтение данных. Ниже
показан пример программы, которая открывает файл как двоичный на чтение и
запись. Записывает в него размерность вектора вещественных чисел. Затем
записывает сам вектор в файл. Далее указатель файла перемещается в начало файла
и заново читается размерность вектора уже из файла. Затем выделяется память
заданного размера, читается вектор в новый буфер, затем новый вектор
печатается. После печати выделенная динамическая память возвращается, файл
закрывается. Программа завершает свою работу.
В этом примере сочетается две операции, как правило,
разделенных. Первая это создание двоичного файла. Вторая это чтение данных из
файла. Структура файла - первые четыре байта хранят размерность массива. Затем
хранятся сами элементы массива. При чтении массива из файла используется
механизм распределения памяти. Первоначально читается размерность массива,
затем распределяется память, производится чтение массива в динамический буфер.
- Ниже приведен исходный текст программы.
-
#include
<string.h>
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
int main(void)
{
FILE *stream;
int
n=10;
int
m;
double
*z;
double
vec[10]= { 200.0, 100.9, 123.11, 321.33, 456.77, 777.0, 81.98, 990.45, 445.07, 0.009
};
stream =
fopen("Example2.bin", "w+b"); //открыть
файл в двоичной моде
fwrite(&n,sizeof(int) , 1,
stream); //записать размерность
fwrite(vec,sizeof(double)*10 ,
1, stream); //записать
fseek(stream, 0, SEEK_SET); //переместить указатель в начало файла
fread(&m,sizeof(int) , 1,
stream); //читать размерность
z=(double*)malloc(sizeof(double)*m); //выделить память под массив
fread(z,sizeof(double)*m , 1,
stream); //читать массив чисел
printf("%d \n",m);
for(int i=0; i<m; i++) //печать
массива
printf("%3.3f
",z[i]);
printf("\n"); //освободить память
free(z);
fclose(stream); //закрыть файл
getch();
return
0;
}
- Упражнения
-
- Написать программу, сохраняющую в файл матрицу
вещественных чисел переменной размерности.
- Написать программу чтения матрицы переменной размерности.
|