- •Елементи мови с.Основні символи
- •Ключові слова
- •Ідентифікатори
- •Константи
- •Лексеми
- •Коментарі
- •Умовні оператори. Логічні вирази
- •Форми оператора if
- •Оператор вибору switch
- •Перерахування типів
- •Перетворення типів
- •Оператори циклу
- •Оператор while
- •Оператор for
- •Оператор do-while
- •Оператори переходу
- •Cтруктури
- •Об'єднання (суміші)
- •Робота з структурами.
- •Ініціалізація структур
- •Робота з обєднаннями
- •Визначення об'єктів та типів
- •Методи доступу до елементів масивів
- •Покажчики на багатовимірні масиви
- •Операції з вказівниками
- •Робота з покажчиками.
- •Покажчики на структуру
- •Масиви структур
- •Динамічне розміщення масивів
- •Робота з динамічними масивами
- •Робота з непрямою адресацією
- •Робота з покажчиками як параметрами функцій
- •Використання вказівників
- •Операції з вказівниками
- •Використання вказівників в програмі
- •Робота з файлами
- •Відкриття файлу
- •Обробка відкритого файлу
- •Перевірка ознаки кінця файлу
- •Закриття файлу
- •Функції введення-виведення
- •Робота з текстовими файлами
- •Функція форматованого виведення printf ()
- •Основні формати
- •Модифікації форматів
- •Функція форматованого введення scanf ()
- •Робота функції scanf ()
- •Призначеня функцій бібліотеки введення-виведення
- •Макрокоманди
- •Потокові інтерфейси введення-виведення
- •Ближні покажчики (near)
- •Дальні покажчики (far)
- •Покажчики huge
- •Функції для роботи з рядками
- •Динамічні рядки, клас string
- •Визначення поточної робочої директорії
- •Визначення поточного каталогу диска
- •Визначення / встановленн поточного диска
- •Пошук файлу
- •Створення, видалення, зміна директорій
- •Приклад програми для роботи з директоріями
- •Перегляд каталогу диска
- •Параметри структури ffblk
- •Робота з клавіатурою
- •Робота з файлами
- •Послідовний доступ до елементів двійкових файлів
- •Організація довільного доступу до елементів двійкових файлів
- •Робота динамічних структур даних.
- •Функції управління пам'яттю
- •Атрибути файлів.
- •Параметри
- •Динамічні структури даніх
- •Лінійні списки
- •Стек. Загальні поняття.
- •Приклад використання стеку
- •Основні визначення
- •Приклад використання дерев
Робота з файлами
Текстові файли не є єдино можливим способом зберігання інформації на диску. Можна запам'ятовувати інформацію і в двійковому вигляді.
Принципово обробка двійкових файлів не дуже сильно відрізняється від обробки текстових файлів. У будь-якому випадку, перш ніж працювати з файлом, слід пов'язати його фізичне ім'я з логічним ім'ям (з файловим потоком) і відкрити файл, вказавши режим доступу. Після роботи з файлом його необхідно закрити. Тим не менше, відмінності обробки двійкових файлів і текстових все ж існують. Розглянемо їх.
Відкрити файл для двійкової обробки можна за допомогою виклику функції 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);
Це найшвидший спосіб завантаження з файлу великої кількості чисел.
