Для пере направлення потоків використовується функція freopen(). Її можна використовувати для пере направлення стандартних потоків, що дуже корисно при відлагоджені програми, наприклад здійснюється виведення не на екран, а у файл.
FILE *f reopen (const char *имя_файлу, const char *режим, FILE *поток)
Параметр режим може мати такі ж самі значення як у функції fopen().
В наступному прикладі функція freopen() перенаправляє стандартний потік stdout у файл OUTPUT.
#include <stdio.h> int main(void) { char str[80]; | |
freopen("c:\\output.txt", "w", stdout); | |
printf("Введіть символьний рядок: "); gets(str); printf(str); return 0; } |
Результат виконання
Результат запису потоку у файл
Робота з файлами у С++
Для работи з файлами в мові С++ використовуються класи потоків, для їх використання використовується бібліотека fstream.
Існує 3 основні класи для потоків:
ifstream використовується для роботи з файлами в режимі зчитування;
ofstream – в режимі запису;
fstream – запису та зчитування.
Оголошення змінних, що будуть пов’язані з відповідним потоком, відбувається наступним чином:
|
|
#include < fstream. h>
ifstream inf; – оголошена зміна inf для потоку в режимі запису;
ofstream outf; – оголошена зміна outf для потоку в режимі зчитування;
fstream iof; – оголошена зміна iof для потоку в режимі зчитування та запису.
Відкриття файлу здійснюється командою, що має наступну специфікацію:
<Змінна, що пов’язана з потоком>.open(<ім’я файла>,<режим роботи>, <режим доступу до файлу>);
По замовчувані усі файли відкриваються в текстовому режимі.
Файл може бути відкритий в одному з наступних режимів:
· ios::in — відкриття файлу в режимі зчитування даних, він є режимом по замовчуванні для потоку ifstream;
· ios::out — відкриття файлу в режимі запису даних (при цьому існуючий файл знищується), він є режимом по замовчуванню для потоку ofstream;
· ios::binary — відкриття файлу в двійковому (бінарному) режимі;
· ios::app — відкриття файлу в режимі запису даних в кінець файлу;
· ios::ate — перейти в кінець вже відкритого файлу;
· ios::trunc — очищує файл, це ж відбувається в режимі ios::out;
· ios::nocreate —забезпечує виконання операції тільки відкриття файлу тільки для існуючого файлу;
· ios::noreplace — не дозволяє відкривати існуючий файл.
Режими відкриття файлу є можливість об’єднувати знаком «и» («|»), наприклад при відкриті файлу для запису даних в бінарному (двійковому) режимі необхідно задани ios::out | ios::binary. Якщо параметр режиму доступу не вказано робота з потоком буде відбуватися по замовчуванні для цього потоку.
Режим доступу до файлу визначаються атрибутами типу int
Атрибут | Значення |
Нормальний файл, відкритий доступ | |
Файл тільки для зчитування | |
Скритий файл | |
Системний файл | |
Архівний файл |
При відкритті файлу файловій (потоковій) змінній присвоюється значення true, в іншому випадку false.
|
|
Закриття роботи з потоком здійснюється командою:
<потокова (файлова) зміна>.close();