Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_9_fajly.doc
Скачиваний:
17
Добавлен:
17.05.2015
Размер:
75.78 Кб
Скачать

Лекція 9.

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

Дисковим файлом називають поіменований набір даних одного типу.

Щоб отримати доступ до даних в файлі, необхідно передати покажчик відповідній функції для роботи з файлами.

Типи дискових файлів.

Всі файли поділяються на два основні типи: текстові і двійкові (інакше бінарні), зв’язані з різними типами потоків даних. Згадаємо, що текстовий потік складається із послідовності ASCII кодів, представлених у вигляді рядків; кожний рядок завершується символом \n. Кінець текстового потоку помічається символом кінця файлу (^Z). Навпаки, двійковий потік являє собою послідовність бітів, данні двійкового не можна інтерпретувати зовні текста програми.

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

На будь-якому типу комп’ютера для роботи з файлами необхідні такі чотири кроки:

  1. Необхідно отримати доступ до потрібного файла. Це схоже на відкриття потрібної шафи з файлами. Ця операція має назву відкриття файлу.

  2. Після відкриття файлу можливо виконувати читання даних з нього. При цьому відбувається переніс даних з диску в оперативну пам’ять, де буде виконуватися обробка даних. Оскільки з даними початкового файлу на диску нічого не відбувається, то цей крок можна розглядати як фотокопіювання вмісту потрібної папки файлів в шафі.

  3. Цей крок є необов’язковим; його потрібно виконувати тільки в тому випадку, коли ви змінили дані в файлі і бажаєте зберегти зміни, записавши їх в початковий файл на диску. При цьому відбувається переніс даних із оперативної пам’яті на диск і зміна вмісту файла. Це нагадує операцію заміни сторінок в вашій папці файлів.

  4. Після завершення роботи з файлом його потрібно звільнити. Цю операцію називають закриттям файлу; така операція аналогічна запиранню шафи і здачі ключа.

Для роботи з дисковим файлом потрібно відкрити потік даних, зв’язаних з цим файлом. Частиною цієї процедури є визначення області оперативної пам’яті для роботи для обробки потоку; ця область має назву файлового буфера. В С доступ до файлового буферу відбувається шляхом завдання адреси в оперативній пам’яті; ця адреса, звичайно, зберігається в покажчику, який ви повинні передати оператору відкриття файлу.

Для підготовки файла для роботи з ним використовується функція fopen(). Ця функція відкриває потік даних, зв’язаний з вказаним файлом, і повертає адресу файлового буферу в оперативній пам’яті.

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

FILE *fopen(const char *file_name, const char *name);

Функції в якості аргументів потрібно передати два значення: покажчик на ім’я відкриваємого файлу file_nameі покажчик на рядок (mode), який має вказівку на засіб (режим) відкриття файлу. Функція повертає покажчик на тип FILE; це тип структури, визначеної в stdio.h. Потрібно пам’ятати, що покажчик, який повертає функція fopen() (місце розташування файлового буферу), повинен бути типу FILE.

Приклад виклику функції fopen();

FILE *FileOpend;

pFileOpend = fopen(FileName, “r”);

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

Режими доступу до файлу:

Режими

Призначення

r

Доступ тільки для читання. При відсутності вказаного файлу fopen() повертає нульовий покажчик (NULL).

w

Доступ тільки для запису. При відсутності вказаного файлу fopen() створює файл з таким ім’ям. Якщо файл з таким ім’ям існує, його вміст стирається.

a

Режим добавлення даних. Якщо файл з вказаним ім’ям не існує, fopen() створює його. В існуючий файл дані додаються до уже створених раніше.

r+

Доступ для читання і запису при відсутності вказаного файлу fopen() створює файл з таким ім’ям. Якщо файл з таким ім’ям існує, дані записуються поверх існуючих даних, починаючи з першої позиції в файлі.

w+

Режим для читання і запису. Якщо файл з вказаним ім’ям не існує, fopen() створює його. Якщо файл з таким ім’ям існує, колишній вміст файла стирається.

a+

Доступ для читання і додавання. Якщо файл з вказаним ім’ям не існує, fopen() створює його. В існуючий файл дані додаються до існуючих в файлі даних.

Таблиця містить опис варіантів відкриття файлів тільки в текстових режимах; для відкриття файла в двійковому режимі необхідно до приведених в таблиці описів відповідного режиму добавити символ b.

Наприклад, приведений нижче фрагмент коду С запитує у користувача ім’я файлу, потім намагається відкрити його в режимі тільки для читання в двійковій формі:

FILE *pDiskFile;

puts(“введіть ім’я файлу, який читають”);

gets(EnterredFilename);

pDiskFile = fopen(EnterredFilename, “rb”);

Значення покажчика pDiskPointer повино бути передано відповідному оператору, який повинен виконати читання даних з відкритого файлу. При відсутності вказаного файлу fopen() повертає нульовий покажчик (NULL). Таке ж значення покажчика повертається в випадку неможливості знайти файл, наприклад з-за відсутності необхідного обладнання.

Соседние файлы в папке lexzii_08