- •Потоки та файли
- •Основи файлової системи
- •Закриття файлу
- •Запис символу: putc() і fputc()
- •Читання символу: getc() і fgetc()
- •Використання fopen(), getc(), putc(), і fclose()
- •Використання feof ()
- •Введення/виведення рядків: fputs () і fgets ()
- •Int fputs (const char * cmp, file * pf); char * fgets (char * cmp, int довжина, file * pf);
- •Функція rewind ()
- •Функція ferror ()
- •Функції fprinf () і fscanf ()
- •Введення-виведення при прямому доступі: функція fseek ()
- •Int fseek (file * pf, long int коліч_байт, int начало_отсчета);
- •Виведення у файловий потік
- •Запис у вихідний файловий потік
- •Читання з вхідного файлового потоку
- •Перевірка помилок при виконання файлових операцій
- •Виконання операцій читання і запису
- •Зауваження та рекомендації
Перевірка помилок при виконання файлових операцій
Програми, представлені до теперішнього моменту, припускали, що під час файлових операцій В/В не відбуваються помилки. На жаль, це збувається не завжди. Наприклад, якщо відкривати файл для введення, треба перевірити, що файл існує. Аналогічно, якщо програма пише дані в файл, необхідно переконатися, що операція пройшла успішно (наприклад, відсутність місця на диску, швидше за все, перешкодить запису даних). Щоб допомогти програмам стежити за помилками, можна використовувати функцію fail файлового об'єкта. Якщо в процесі файлової операції помилок не було, функція поверне false (0). Однак, якщо зустрілася помилка, функція fail поверне true (1). Наприклад, якщо програма відкриває файл, їй слід використовувати функцію fail, щоб визначити, чи відбулася помилка, як це показано нижче:
ifstream input_file ("FILENAME.DAT"); if (input_file.fail ()) { cerr <<"Помилка відкриття FILENAME.EXT" <<endl; exit (1); }
Таким чином, програми повинні переконатися, що операції читання і запису пройшли успішно. Наступна програма TEST_ALL.CPP використовує функцію fail для перевірки різних помилкових ситуацій:
# include <iostream.h> # include <fstream.h> void main (void) { char line [256]; ifstream input_file ("BOOKINFO.DAT"); if (input_file.fail ()) cerr <<"Помилка відкриття BOOKINFO.DAT" <<endl; else { while ((! input_file.eof ()) & & (! input_file.fail ())) { input_file.getline (line, sizeof (line)); if (! input_file.fail ()) cout <<line <<endl; } } }
Закриття файлу
При завершенні вашої програми операційна система закриє відкриті нею файли. Однак, як правило, якщо вашій програмі файл більше не потрібний, вона повинна його закрити. Для закриття файлу ваша програма повинна використовувати функцію close, як показано нижче:
input_file.close ();
Коли ви закриваєте файл, всі дані, які ваша програма писала в цей файл, скидаються на диск, і оновлюється запис каталогу для цього файлу.
Управління відкриттям файлу
У прикладах програм файлові операції введення і виведення виконувалися з початку файлу. Однак, коли ви записуєте дані у вихідний файл, можливо, ви захочете, щоб програма додавала інформацію в кінець існуючого файлу. Для відкриття файлу в режимі додавання слід при його відкритті вказати другий параметр:
ifstream output_file ("FILENAME.EXT", ios:: app);
В даному випадку параметр ios:: app вказує режим відкриття файлу. В міру ускладнення ваших програм вони будуть використовувати поєднання значень для режиму відкриття файлу, що перераховані в табл.
Режим відкриття |
Призначення |
ios::app |
Відкриває файл в режимі додавання, встановлюючи файловий покажчик на кінець файлу |
ios::ate |
Встановлює файловий покажчик на кінець файлу |
ios::in |
Вказує відкрити файл для введення . |
ios::nocreate |
Якщо й файл не існує, не створювати файл і повернути помилку |
ios::noreplace |
Якщо файл існує, операція відкриття повинна бути перервана и повинна повернути помилку |
ios::out |
Вказує відкрити файл для виведення . |
ios::trunc |
Перезаписує вміст існуючого файлу |
Наступна операція відкриття файлу відкриває файл для виведення, використовуючи режим ios:: noreplace, щоб запобігти перезапис існуючого файлу:
ifstream output_file ("FIlename.EXT", ios:: out | ios:: noreplace);