Для роботи з файлами використовуються спеціальні типи даних, звані потоками.
Потік ifstream служить для роботи з файлами в режимі читання.
Потік ofstream служить для роботи з файлами в режимі запису.
Потік fstream служить для роботи з файлами в режимі, як читання, так і запису.
У програмах на C ++ при роботі з текстовими файлами в потоковому режимі необхідно підключати бібліотеки
С ++ підтримує всю систему введення / виведення С і додає до неї додаткові можливості, пов'язані в основному з введенням / висновком об'єктів. Опис засобів для створення потоків в С ++ представлено в заголовки
Таблиця 5. Потоки, які визначаються в мові С ++.
Ім'я стандартного файлу
Стандартний введення - клавіатура
Стандартний висновок - екран
Стандартна помилка - екран
Буферизованная версія cerr - екран
Основні алгоритми роботи з файлами
Для запису даних в файл потрібно виконати:
1. Описати зміну типу ofstream.
2. Відкрити файл для запису за допомогою функції open.
3. Вивести інформацію в файл за допомогою cout.
4. Обов'язково закрити файл.
Для читання даних з текстового файлу потрібно виконати:
1. Описати зміну типу ifstream.
2. Відкрити файл для читання за допомогою функції open.
3. Вважати інформацію з файлу за допомогою cin при зчитуванні кожної порції даних необхідно перевіряти, що читання можливо.
Опис потокової змінної
Для того щоб почати працювати з текстовим файлом, необхідно описати змінну типу ofstream.Напрімер, за допомогою оператора
буде створена змінна F для запису інформації в файл.
У загальному випадку оператор відкриття файлу буде мати вигляд:
де F- змінна, описана в нашому випадку як ofstream;
file- повне ім'я файлу на диску;
mode- режим роботи з відкриваються файлом.
Існують різні режими для відкриття файлу (див. Табл.6).
Таблиця 6. Режими роботи з потоком при його відкритті
Режими роботи з файлом при відкритті
Параметр mode може бути відсутнім, в цьому випадку файл відкривається в режимі за замовчуванням для даного потоку:
ios :: in- для потоків ifstream,
ios :: out- для потоків ofstream.
Після вдалого відкриття файлу (в будь-якому режимі) в змінної F буде зберігатися 1 (true), в іншому випадку 0 (false). Це дозволить перевіряти коректність операції відкриття файлу.
Якщо відкриття файлу завершилося невдачею, об'єкт, відповідний потоку, буде повертати значення 0:
Перевірити успішність відкриття файлу можна також за допомогою функції is_open (). Функція повертає 1, якщо потік вдалося зв'язати з відкритим файлом. наприклад,
if (! ofs.is_open ()) cout <<"Файл не открыт\n";
Відкрити файл в режимі запису можна одним з таких способів:
ofstream F; F.open ( "abc.txt", ios :: out);
Другий спосіб, режим ios :: out є режимом за замовчуванням для потоку ofstream
Третій спосіб об'єднує опис змінної типу потік і відкриття файлу в одному операторі.
ofstream F ( "abc.txt", ios :: out);
Після відкриття файлу в режимі запису, буде створено порожній файл, в який можна буде записувати інформацію. Якщо необхідно відкрити існуючий файл (при цьому зберегти його вміст), то в якості режиму слід використовувати значення ios :: app.
Після відкриття файлу в режимі запису, в нього можна писати точно так же, як і на екран, тільки замість стандартного пристрою виведення cout необхідно вказати ім'я відкритого для запису файлу.
Наприклад, для запису в потік F змінної a, оператор виведення матиме вигляд:
Для послідовного виведення в потік G змінних b, c і d оператор виведення стане таким:
G <
Читання з файлу виконується коректно до досягнення кінця файлу. Для перевірки, чи досягнуто кінець файлу, можна використовувати функцію
яка має прототип int eof () ;.
Ця функція повертає 0, якщо кінець файлу не досягнуть, і значення 1 при досягненні кінця файлу.
Відкриті на диску файли після закінчення роботи з ними рекомендується закрити. Оператор закриття файлу буде мати вигляд:
де F- змінна для записи інформації в файл.
Приклад 1. Робота з файлом в потоковому режимі.
При використанні бібліотеки класів С ++ операції відкриття, створення і закриття, виконуються при створенні об'єктів вихідного (вхідного) файлового потоку.
#include
#include
// створюється файл, старий стирається