Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторн_робот_Ч2.doc
Скачиваний:
19
Добавлен:
03.11.2018
Размер:
2.12 Mб
Скачать
  1. Теоретичні відомості Читання і запис двійкових файлів

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

  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);

}

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

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

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

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

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

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

Приклад 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().

Приклад 2. Написати програму для послідовного читання двійкових значень з файлу 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 цілочисельних значень з диска у файл можна використовувати фрагмент програми