Бібліотечний файл fstream.h містить визначення двох класів-потоків, об'єкти яких використовуються для програмування операцій з файлами:
ifstream - для читання з файлу,
ofstream - для запису у файл.
Потоки для роботи з файлами створюються простими оголошеннями:
ifstream fin;
ofstream fout;
Тут fin - потік, відкритий для читання (добування) інформації, fout - потік для запису (вставки). Знищення об'єктів-потоків fin та fout буде виконано автоматично при виході зі сфери дії цих імен (звичайно при виході із блоку). Зв'язування оголошеного потоку з конкретним файлом робиться за допомогою функції потоку open:
fin.open("A.dat");
fout.open("B.dat");
Відзначимо, що функція open, крім основного, має ще два параметри, її прототип виглядає так:
void open(char* filename, int mode, int access);
Параметр mode задає режим роботи з файлом, значення цього параметра наведені нижче.
ios::app - відкриває файл у режимі додавання записів у кінець файлу, цей
режим застосовується тільки до файлів, які відкриваються для
запису;
ios::ate - викликає позиціювання покажчика в кінець файлу;
ios::binary - відкриття файлу у двійковому режимі (по умовчанню працює
текстовий режим);
ios::in - відкриття файлу для введення;
ios::out - відкриття файлу для виведення;
ios::trunc - файл скорочується до нульової довжини.
Для сполучення декількох режимів використовується операція “ | ”.
Параметр access відповідає атрибутам файлів DOS/Windows:
0 - звичайний файл із вільним доступом (значення по умовчанню);
1 - файл тільки для читання;
2 - схований файл;
4 - системний файл;
8 - архівний файл.
Зв'язати потік з наданим файлом можна одразу при оголошенні потоку:
ifstream fin("A.dat");
ofstream fout("B.dat");
Якщо з якихось причин файл відкрити не вдалося, потокова змінна (fin або fout) отримує значення 0. Таким чином успішність відкриття файлу можна перевіряти за допомогою такого оператору:
if (fin==0) puts("The file cannot be open!");
Використання операцій добування “<<” і вставки ”>>”
Символи операцій добування і вставки перевантажені таким чином, щоб їх можна було використовувати не тільки для стандартних пристроїв, але й для довільних файлів. Ці операції працюють також і для стандартних потоків cin та cout.
Для контролю досягнення кінця файлу можна застосовувати функцію f.eof() , де f - ім’я потоку. Функція повертає значення true, якщо кінець файлу був досягнутий.
У прикладі, наведеному нижче, таблиця деякої функції y(x), що представлена двома масивами типу double, копіюється з одного файлу в іншій.
// Приклад 1
#include <fstream.h>