Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л10. Потоки в С++.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
125.44 Кб
Скачать

Файлові потоки

Під файлом зазвичай розуміють поіменовану інформацію на зовнішньому носієві, наприклад жорсткому магнітному диску. Логічно файл можна подати як кількість послідовних байтів, тому такі пристрої як дисплей, клавіатуру і принтер також можна розглядати як окремі випадки файлів.

За способом доступу файли можна поділи: на послідовні (текстові), читання і запис в яких проводяться з початку байт за байтом, і файли з довільним доступом (бінарні) , які допускають читання і запис у вказану позицію.

Стандартна бібліотека містить три класи для роботи з файлами:

ifstream — клас вхідних файлових потоків;

ofstrearn — клас вихідних файлових потоків;

fstream — клас двонаправлених файлових потоків.

Ці класи є похідними від класів istream, ostream та iostream відповідно, тому вони містять перевантажені операції << і >>, прапорці форматування, маніпулятори, методи, стани потоків і т. д.

Використання файлів в програмі передбачає наступні операції:

  • створення потоку;

  • відкриття потоку і пов’язування його з файлом;

  • обмін (ввід/вивід);

  • знищення потоку;

  • закриття файлу.

Кожен клас файлових потоків містить конструктори, за допомогою яких можна створювати об'єкти цих класів різними способами.

Конструктори без параметрів створюють об'єкт відповідного класу, не пов'язуючи його з файлом:

ifstream (); { input }

ofstream (); { output }

fstream ();, { file- потік}

Конструктори з параметрами створюють об'єкт відповідного класу, відкривають файл з вказаним ім'ям і пов'язують файл з об'єктом:

іfstream(const char *name, int mode = ios::in);

ofstream(const char *name, int mode = ios::out | ios::trunc);

Другим параметром конструктора є режим відкриття файлу. Якщо встановлене за замовчанням значення не влаштовує програміста, можна вказати інше, склавши його з бітових масок, визначених в класі ios:

enum open_mode {

in = 0x01, //Відкрити для читання

out = 0x02, // Відкрити для запису

ate = 0x04, // Встановити покажчик на кінець файлу

арр = 0x08, // Відкрити для додавання в кінець

trunc = 0x10, // Якщо файл існує, вилучити його

nocreate = 0x20, // Якщо файл не існує, видати помилку

noreplace = 0x40, // Якщо файл існує, видати помилку

binary= 0x80. // Відкрити у двійковому режимі

};

Відкрити файл в програмі можна з використанням або конструкторів, або методу open, що має такі ж параметри, як і у відповідному конструкторі, наприклад

// Використання конструктора

ifstream inpf ("input.txt"); if (!inpf){

cout << "Неможливо відкрити файл для читання"; return 1;}

ostream f;

f.open("output.txt". ios :: out); // Використання методу open

if (!f) {

out << "Неможливо відкрити файл для запису"; return 1 ;}

Читання і запис виконуються або за допомогою операцій читання і вилучення, аналогічних потоковим класам, або за допомогою методів класів.

Приклад використання методів (програма виводить на екран вміст файлу):

#include <fstream.h>

int main () {

char text[81], buf[81];

cout << "Введите имя файла:";

сіn >> text;

ifstream f(text);

if ( !f) {

cout << "Помилка відкриття файлу"; return 1;}

while ( !f.eof() ) {

f.getline(buf, 81);

cout << buf << endl; }

return 0; }

Для закриття потоку визначений метод close(), але оскільки він неявно виконується деструктором, явний виклик необхідний тоді, коли потрібно закрити потік раніше кінця його області видимості.

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