Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
8
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

7.1.2. Робота з потоком fstream

Для здійснення операцій з файлами окрім класу CFile можливо використовувати потокові класи: ifstream, ofstream і fstream. Ці класи є похідними, відповідно, від класів istream, ostream і iostream. Класи файлових потоків успадковують всі функціональні можливості своїх батьків (перевантажені операції << і >> для вбудованих типів, функції і прапори форматування, маніпулятори та ін.) Для реалізації файлового введення-виведення потрібно включити в програму заголовний файл fstream.

Для відкриття використовується функція-член open() з одним з об’єктів файлових потоків. Для закриття файлів використовується функція-член close():

Формат:

fs_obj.open(file_name, access);

fs_obj. close();

fs_obj – об’єкт, призначений для роботи з файлом.

file_name – рядок (або вказівка на рядок); може бути зазначений весь маршрут.

access – є значенням з таблиці можливих режимів доступу (табл. 7.3) або комбінацію з використанням оператора АБО ( | )

Таблиця 7.3

Можливі режими доступу

Режим

Опис

Код

ios::in

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

1

ios::out

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

2

ios::ate

Відкрити файл і встановити вказівку на кінець

4

ios::app

Відкрити файл для додавання

8

ios::trunc

Видалити вміст файлу

16

ios::nocreate

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

32

ios::noreplace

Якщо файл є, його відкриття тільки для додавання

64

ios::binary

Відкрити файл в двійковому режимі

128

Файли бувають двох типів: текстовими та бінарними (binary).

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

Робота з бінарними файлами за допомогою потоку fstream

Наведемо приклад, аналогічний прикладу роботи з класом CFile, де на диск записується 100 структур типу st, а потім зчитується структура з номером 5. Робота з бінарними файлами за допомогою потоку fstream приведена у функції відгуку OnButton2. Зауважимо, що для запису та читання бінарних файлів використовуються відповідно функції write, read.

void CFileDlg::OnButton2()

{

int i;

int n = 5; // для виведення

int kol_st = 100;

// ------------------------

st ob1;

ob1.a = 65;

ob1.b = 1.5;

strcpy(ob1.mas, "123456789");

// --------------------------

st ob2;

//char mas[255];

CFileException er;

fstream fp;

CString vr;

fp.open("1.txt", ios::in |

ios::out | ios::trunc |ios::binary);

try

{

for(i = 0; i < kol_st;i++)

{

ob1.a = 65 + i;

fp.write( (char*) (&ob1), sizeof(ob1));

}

}

catch( ...)

{

fp.close();

return;

}

try

{

fp.seekg((n - 1)*sizeof(st),ios::beg);

fp.read( (char*)(&ob2), sizeof(ob2));

}

catch( ...)

{

fp.close();

return;

}

vr.Format(" a = %d b = %f mas = %s ",ob2.a,ob2.b,

ob2.mas);

MessageBox(vr);

fp.close();

}

Робота з текстовими файлами за допомогою потоку fstream

Для роботи з текстовими файлами у потоці fstream використовуються перевантажені оператори: “<<” – для запису інформації у файл, “>>” – для читання інформації з файлу. Наведемо функцію відгуку OnButton3 для роботи з текстовими файлами.

void CFileDlg::OnButton3()

{

fstream fp;

CString vr;

fp.open("1.txt", ios::in | ios::trunc |ios::out);

fp << "1234 4567 890\n";

fp << "4567\n";

fp.seekg(0L,ios::beg);

char mas[255];

CString vv="";

while (!fp.eof())

{

fp.getline(mas,255,10);

if(strlen(mas) == 0)break;

vv+=mas;

}

MessageBox(vv);

fp.close();

}

У даному фрагменті спочатку відбувається запис до файлу текстової інформації, а потім її зчитування. При роботі з текстовим файлом інформація зазвичай зчитується по рядках до тих пір, поки не буде досягнуто кінця файлу. Якщо кінець файлу досягнуто, функція eof() повертає значення 1, у протилежному випадку – 0. Зчитується рядок за допомогою функції getline, де вказується вказівка на масив типу char*, максимальна кількість зчитуємих символів та розділовий символ рядків. За умовчанням розділовий символ дорівнює символу ‘\n’ (10-й код).

Результат роботи фрагменту програми приведено на рис. 7.3.

Рис. 7.3. Результат роботи з текстовими файлами на основі потоку fstream

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