692_____________________________________________Глава 12

ХАРАКТЕРИСТИКА
сотрудник Иванов, 1960 г.р.

Рассмотренными функциями не ограничиваются возможности работы с тек-
стовыми файлами. Подробнее все эти функции вы можете посмотреть в главе 14 в
разделе 14.12.

12.9.2.3 Двоичные файлы

Теперь остановимся коротко на работе с двоичными файлами. Двоичный файл
представляет собой просто последовательность символов, в которой без каких-либо
разделителей — пробелов, символов конца строки и т.п. хранятся символы, ото-
бражающие самые различные объекты. Они совпадают с тем, как хранятся соот-
ветствующие объекты в оперативной памяти. Что именно и в какой последователь-
ности лежит в двоичном файле — должна знать программа.

Двоичные файлы имеют немало преимуществ перед текстовыми при хранении
каких-то числовых данных. Операции чтения и записи с такими файлами произ-
водятся намного быстрее, чем с текстовыми, поскольку отсутствует необходимость
форматирования: перевода в текстовое представление и обратно. Двоичные файлы,
как правило, имеют существенно меньший объем, чем аналогичные текстовые
файлы. В двоичных файлах вы можете перемещаться в любую позицию и читать
или записывать данные в произвольной последовательности, в то время как в тек-
стовых фалах практически всегда производится последовательная обработка ин-
формации. Пожалуй, недостаток двоичного файла с точк1^рения программиста
только один — смотря его с помощью какого-то текстового редактора трудно по-
нять, где что в нем находится, и это в ряде случаев затрудняет отладку.

О том, как открываются двоичные файлы, уже рассказывалось в разделе
12.9.2.1. Запись и чтение в двоичные файлы чаще всего производятся соответст-
венно функциями fwrite и fread:

#include <stdio.h>
size t fwrite(const void *ptr, size t size, size_t n, FILE *stream) ;

size_t fread(void *ptr, size_t size, size_t n, FILE *stream);

В обе функции передается указатель ptr на выводимые или вводимые данные.
Параметр size задает размер в байтах передаваемых данных, а параметр n опреде-
ляет число передаваемых данных. Применение этих функций иллюстрируется
приведенным ниже примером.

int i = 1, j = 25, il, jl;

double a = 25e6, al;

char s[10], si [10] ;

strcpy(s,"Иванов") ;

FILE *F;

// запись в файл

if ((F = fopen("Test.dat", "wb")) == NULL)

{

ShowMessage("Файл не удается создать");

return;

}

fwrite(&i,sizeof(int),1,F);           // запись i
fwrite(&j,sizeof(int),1,F);           // запись j
fwrite(&a,sizeof(double),1,F);        // запись а
fwrite(s,sizeof(char),strlen(s)+1,F); // запись строки s
fclose(F) ;

// чтение из файла

if ((F = fopen("Test.dat", "rb")) == NULL)
{
ShowMessage("Файл не удается открыть");