Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи по програмуванні(14 лаб).doc
Скачиваний:
77
Добавлен:
16.05.2015
Размер:
1.43 Mб
Скачать

Теоретичні відомості

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ifstream();

ofstream();

fstream();

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

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

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

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

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

enum open_mode {

in

= 0x01

/ / Відкрити для читання

out

= 0x02

/ / Відкрити для запису

ate

= 0x04

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

арр

= 0x08

/ / Відкрити, щоб додати в кінець

trunc

= 0x10

/ / Якщо файл існує, видалити

nocreate

= 0x20

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

noreplace

= 0x40

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

binary

= 0x80

/ / Відкрити у двійковому режимі

};

У таблиці 10.6 наведено відповідність між бітовими масками класу ios і режимами відкриття файлу, описаними в <stdio.h>.

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

ifstream inpf ("input.txt"., ios:: in | ios: mocreate); / / Використання конструктора

if (! inpf) {

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

return 1;}

ofstream f;

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

if (! f) {

cout «" Неможливо відкрити файл для запису ";

return 1;

}

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

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

# Include <fstream.h>

int main (){

char text [81]. buf [81];

cout «" Введіть ім'я файлу: ";

cin »text;

ifstream f (text. ios:: in | ios:: nocreate);

if (! f) {

cout «" Помилка відкриття файлу ";

return 1;

}

while (! f.eof ()) {

f.getline (buf. 81);

cout «buf« endl;

{

return 0;

}

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