Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3blok_Програмування.doc
Скачиваний:
33
Добавлен:
14.02.2016
Размер:
121.86 Кб
Скачать

6. Процедури і функції роботи з файлами.

Відкриття файлу

Функція fopen () відкриває потік і пов'язує з цим потоком певний файл. Потім вона повертає покажчик цього файлу. Найчастіше (а також в частині цієї глави) під файлом мається на увазі дисковий файл. Прототип функції fopen () такий:

FILE * fopen (constchar * имя_файла, constchar * режим);

де имя_файла - це покажчик на рядок символів, що представляє собою припустиме ім'я файлу, в яке також може входити специфікація шляху до цього файлу. Рядок, на яку вказує режим, визначає, яким чином файл буде відкритий. У табл.1 показано, які значення рядка режим є допустимими. Рядки, подібні "r + b" можуть бути представлені і у вигляді "rb +".

Таблица1: Допустимые значения режим

R - Відкрити текстовий файл для читання

w - Створити текстовий файл для запису

a - Додати в кінець текстового файлу

rb- Відкрити двійковий файл для читання

wb- Створити двійковий файл для запису

ab- Додати в кінець двійкового файлу

r + - Відкрити текстовий файл для читання / запису

w + - Створити текстовий файл для читання / запису

a + - Додати в кінець текстового файлу або створити текстовий файл для читання / запису

r + b - Відкрити двійковий файл для читання / запису

w + b - Створити двійковий файл для читання / запису

a + b - Додати в кінець двійкового файлу або створити двійковий файл для читання / запису

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

У наступному коді функція fopen () використовується для відкриття файлу на ім'я TEST для запису.

FILE * fp;

fp = fopen ("test", "w");

Хоча попередній код технічно правильний, але його зазвичай пишуть трохи по-іншому:

FILE * fp;

if ((fp = fopen ("test", "w")) == NULL) {

  printf ("Помилка при відкритті файлу. \ n");

  exit (1);

}

Цей метод допомагає при відкритті файлу виявити будь-яку помилку, наприклад, захист від запису або повний диск, причому виявити ще до того, як програма спробує в цей файл небудь записати. Взагалі кажучи, завжди потрібно спочатку отримати підтвердження, що функція - fopen () виконалася успішно, і лише потім виконувати з файлом інші операції.

Хоча назва більшості файлових режимів пояснює їх зміст, проте не завадить зробити деякі доповнення. Якщо спробувати відкрити файл лише для читання, а він не існує, то робота fopen () завершиться відмовою. А якщо спробувати відкрити файл у режимі дозапису, а сам цей файл не існує, то він просто буде створений. Більше того, якщо файл відкритий в режимі дозапису, то все нові дані, які записуються в нього, будуть додаватися в кінець файлу. Вміст, яке зберігалося в ньому до відкриття (якщо тільки воно було), змінено не буде. Далі, якщо файл відкривають для запису, але з'ясовується, що він не існує, то він буде створений. А якщо він існує, то вміст, яке зберігалося в ньому до відкриття, буде втрачено, причому буде створений новий файл. Різниця між режимами r + і w + полягає в тому, що якщо файл не існує, то в режимі відкриття r + він створений не буде, а в режимі w + все відбудеться навпаки: файл буде створений! Більше того, якщо файл вже існує, то відкриття його в режимі w + призведе до втрати його вмісту, а в режимі r + воно залишиться недоторканим.

З таблиці. 1 видно, що файл можна відкрити або в одному з текстових, або в одному з двійкових режимів. У більшості реалізацій в текстових режимах кожна комбінація кодів повернення каретки (ASCII 13) і кінця рядка (ASCII 10) перетвориться при введенні в символ нового рядка. При виведенні ж відбувається зворотний процес: символи нового рядка перетворюються в комбінацію кодів повернення каретки (ASCII 13) і кінця рядка (ASCII 10). У двійкових режимах такі перетворення не виконуються.

Максимальне число одночасно відкритих файлів визначається FOPEN_MAX. Це значення не менше 8, але чому воно точно дорівнює - це має бути написано в документації по компілятору.

Закриття файлу

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

intfclose (FILE * уф);

де уф - покажчик файлу, повернений в результаті виклику fopen (). Повернення нуля означає успішну операцію закриття. У разі ж помилки повертається EOF. Щоб точно дізнатися, в чому причина цієї помилки, можна використовувати стандартну функцію ferror () (про яку незабаром піде мова). Зазвичай відмова при виконанні fclose () відбувається тільки тоді, коли диск був передчасно видалений (стертий) з дисковода або на диску не залишилося вільного місця.

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