Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Читання і запис бінарних файлів

Текстові файли, незважаючи на своє широке поширення, є тільки одним з видів файлів, які можна зберігати на диску. Бінарні файли знайшли більш широке застосування в професійних програмах, тому що :

  1. одна з переваг збереження даних у бінарних форматах – швидкість (тобто немає необхідності перетворювати дані при передачі з диска в пам'ять і навпаки);

  2. інша перевага – пам'ять. Так, наприклад, змінна типу double займає 4 байти, а в текстовій формі набагато більше. Звичайно бінарні файли за розміром менші текстових і в більшості випадків програми обробляють їх швидше, ніж текстові.

Мова С дозволяє досить легко працювати з двійковими файлами. Методи обробки майже такі ж, як і для текстових файлів, і вони працюють як у DOS, так і в Windows, при цьому програми виконують читання і запис наборів байтів.

Відкриття бінарних файлів

Для відкриття двікових файлів необхідно:

  1. визначити файлову змінну File *fp;

  2. безпосереднє відкриття виконується функцією fopen() по всіх режимах якої додається буква b ”rb”, “wb”, “ab”, “r+b”, “w+b”, “a+b”.

Наприклад, оператор fp=fopen(“test.txt”,”r+b”); - відкриває файл для читання і запису в двійковому режимі. При відкритті можливі помилки (тобто програмні переривання), які можна передбачити за допомогою фрагмента програми: File*out;

out=fopen (filename, “wb”);

if(!out)

{

puts(“Саn't create file”);

exit(1);

}

Існує два способи читання і запису бінарних файлів:

послідовний;

прямий (довільний);

Файли з послідовним доступом

Послідовна обробка корисна для швидкого запам'ятовування значень у файлах і для звертання з файловими даними як з потоком байтів (аналогічно запису на магнітну стрічку).

    1. Запис даних у файл з послідовним доступом

Приклад 1. Написати програму запису даних у послідовний файл.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*outf;

int i;

outf=fopen (“int.dat”, “wb”);

if (!outf)

{

puts(“Can’t create file”);

exit(1);

}

puts(“Zapis into file”);

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

fwrite(&i, sizeof(int),1,outf);

fclose(outf);

return 0;

}

Для запису даних у бінарний файл використовується функція fwrite(), що містить чотири параметри:

  1. Адреса змінної чи масиву змінних, з якого байти копіюються на диск;

  2. Число байтів в одній змінній;

  3. Число записуваних елементів: 1 для одного значення, або інше позитивне ціле число записуємих елементів масиву;

  4. Змінна файлового типу File *, відкритого в двоїчному режимі.

Для запису у відкритий файл на диску масив 100 значень можна скористатися фрагментом програми:

int array[100];

fwrite(&array, sizeof(int),100,outf);

Читання даних з файлу послідовного доступу за допомогою функції fread().

Приклад 1. Написати програму для послідовного читання бінарних значень з файлу int.dat.

#include <stdio.h>

#include <stdlib.h>

int main()

{

File*inpf;

int I, val;

inpf=fopen (“int.dat”,“rb”);

if (!inpf)

{

puts(“Can’t create file”);

exit (1);

}

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

{

fread(&val,sizeof(int),1,inpf);

printf (“%d”,val);

}

return 0;

}

Функція fread() вимагає тих же аргументів, що і функція fwrite(). Перший аргумент функції є адресою приймача, у який ця функція повинна скопіювати байти з диска. Тому розмір цієї змінної достатній для запам'ятовування необхідної кількості байтів.

Для вивантаження всього масиву зі 100 цілочисельних значень з диска у файл можна використовувати фрагмент програми

int array[100];

fread(&array, sizeof(int),1, inpf);

це буде самим швидким способом читання значень з диска в пам'ять.