Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
672 Кб
Скачать
☆

Робота з файлами

Текстові файли не є єдино можливим способом зберігання інформації на диску. Можна запам'ятовувати інформацію і в двійковому вигляді.

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

Відкрити файл для двійкової обробки можна за допомогою виклику функції fopen (), але до всіх режимів доступу додають рядкову латинську букву b. Режими доступу однакові для текстових та для двійкових файлів.

FILE * fb = fopen ("Bin_fil.dat", "wb");

відкриє файл для запису в двійковому режимі. А щоб відкрити його для читання і запису слід написати:

FILE * fb = fopen ("Bin_fil.dat", "r + b");

після виклику функції fopen () покажчик на файловий потік fb не дорівнює 0, його можна використовувати в наступних зверненнях до функцій роботи з двійковими файлами, таким як fread () і fwrite ().

Закривають виконавчі файли, як і текстові, функцією fclose ().

Не слід використовувати функції обробки текстових файлів стосовно до двійковим файлів і навпаки.

Існує два способи доступу до елементів двійкових файлів: послідовний і довільний.

Послідовний доступ до елементів двійкових файлів

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

Функція fwrite (), робить запис даних у потік. Прототип її знаходиться в заголовному файлі stdio.h. Синтаксичне опис функції має вигляд:

size_t fwrite (const void * ptr, size_t site, size_t n, FILE * stream);

араметри функції:

const void * ptr - вказівник на вихідні дані, записувані в файл;

size_t size - розмір в байтах одного елемента даних;

size_t n - число записуваних в файл елементів даних, розміром size байтів кожний;

FILE * stream - вказівник на файловий потік, відкритий в двійковому режимі.

Оскільки функція fwrite () має в якості одного з своїх аргументів кількість записуваних елементів, можна застосовувати її і для запису в файл відразу цілого масиву, який до моменту запису в файл повинен бути сформований і заповнений даними.

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

Функція fread () може завантажити більше одного значення з диска в один прийом. Тоді в якості приймача повинен виступати масив елементів відповідного типу і оттаточного розміру.

Цей масив може бути статичним, якщо заздалегідь відома довжина файлу, або динамічним, якщо розмір файлу визначається в процесі виконання програми.

Float arr_f [100];

. . .

fread (& arr_f, sizeof (float), 100, f_inp);

Це найшвидший спосіб завантаження з файлу великої кількості чисел.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]