Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Си.doc
Скачиваний:
3
Добавлен:
15.11.2019
Размер:
2.72 Mб
Скачать

Бинарные файлы

Бинарные файлы представляют собой последовательность символов длиной один байт, нумерация которых начинается с нуля. В конце файла стоит метка EOFEnd Of File.

Объявляется бинарный файл так же, как и текстовый:

FILE *f;

где fуказатель на файл – имя логического файла,

FILE – служебное слово – только заглавными буквами!

Перед началом работы с файлом необходимо связать имя логического файла (файловую переменную) с соответствующим ему физическим файлом на внешнем носителе – открыть файл:

f=fopen(“путь”, “режим”);

где путь – полный путь к файлу на внешнем носителе,

режим – режим открытия файла:

rb – чтение (bbinary – бинарный, двоичный),

wb – запись,

ab – добавление в конец файла,

r+b - чтение с обновлением (rb + wb),

w+b - запись с обновлением,

a+b - добавление с обновлением.

FILE *f_bin;

f_bin=fopen(“D:/User/my_file.dat”, “wb”); // по указанному // пути создан бинарный файл // my_file.dat и открыт // для записи

Если файл с таким именем уже существовал, то он очищается (из него удаляется информация).

Форматированная запись (вывод) в файл осуществляется функцией:

fprintf(указатель на файл, формат вывода, список вывода);

Пример: записать в файл my_file.dat строку символов abc12345+*-/%&@

FILE *f_bin;

const int n=15;

int i;

char d;

char str[n]=”abc12345+*-/%&@”;

f_bin=fopen(“D:/User/my_file.dat”, “wb”); // файл открыт // для записи

for (i=0; i<n; i++)

fprintf(f_bin, “%c”, str[i]); // запись в файл посимвольно

fclose(f_bin); //после записи файл обязательно закрыть!

Структура файла my_file.dat:

abc12345+*-/%&@

Внимание! В бинарных файлах нельзя использовать символ перехода на новую строку.

Перед чтением (вводом) данных из файла его необходимо открыть для чтения:

f=fopen(“путь”, “rb”);

Если файл не найден, то значение указателя f будет равно NULL.

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

fscanf(указатель на файл, формат ввода, список ввода);

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

f_bin=fopen("D:/User/my_file.dat", "rb");

while (!feof(f_bin)) // пока не конец файла

{

fscanf(f_bin, "%c", &d); // читаем очередной символ // в переменную d

printf("%c", d);

}

На экран будет выведено:

abc12345+*-/%&@

Над бинарными файлами определены следующие операции:

a) перемещение указателя файла в заданную позицию

fseek(указатель на файл, позиция, параметр)

где позиция - количество байтов (символов), отстоящих от заданного места, параметр - SEEK_SET - начало файла,

- SEEK_CUR - текущая позиция файла,

- SEEK_END - конец файла.

Пример 1: прочитать символ из бинарного файла, отстоящий от начала файла на 9 байтов:

f_bin=fopen("D:/User/my_file.dat", "rb");

fseek(f_bin, 9, SEEK_SET);

fscanf(f_bin, "%c", &d);

printf("%c", d);

На экран будет выведено:

*

Пример 2: прочитать символ из бинарного файла, отстоящий от конца файла на 6 байтов:

f_bin=fopen("D:/User/my_file.dat", "rb");

fseek(f_bin, -6, SEEK_END);

fscanf(f_bin, "%c", &d);

printf("%c", d);

На экран будет выведено:

+

б) определение номера текущей позиции, занимаемой указателем файла (нумерация позиций начинается с нуля)

fgetpos(указатель на файл, fpos_t *pos)

где pos - текущая позиция указателя файла - переменная типа fpos_t (определен в stdio.h).

Пример: определить номера позиций начального и конечного символов файла:

fpos_t *nomer;

f_bin=fopen("D:/User/my_file.dat", "rb");

fgetpos(f_bin, &nomer); // номер начального символа

printf("\n nomer=%d", nomer);

while (!feof(f_bin)) // читаем файл до конца

{

fscanf(f_bin, "%c", &d);

}

fgetpos(f_bin, &nomer); // номер конечного символа

printf("\n nomer=%d", nomer);

На экран будет выведено:

nomer=0

nomer=15

76

76