
- •Лабораторна робота №11 (2 год.) Робота з файлами. Файлові потоки.
- •Теоретичні відомості
- •2. Потоки як узагальнені фільтри
- •Приклад 1. Простий приклад потокового вводу-виводу
- •3. Введення-виведення типів char I char*
- •4. Введення-виведення типів int I long
- •5. Введення-виведення типів float I double
- •6. Введення-виведення класів користувача
- •Приклад 3. Ввід-вивід класу користувача
- •7. Маніпулятори
- •8. Використання текстових файлів для введення
- •Приклад 4. Читання і перевірка файлу на помилки
- •9.Виведення текстових файлів
- •10. Читання бінарних файлів
- •Приклад 6. Читання текстового файлу в бінарному режимі
- •11. Запис у бінарні файли
- •12. Копіювання файлів
- •1. Потоки і потік введення - виведення
- •2. Текстові і двійкові потоки
- •3. Буферизація потоків
- •4. Стандартні потоки
- •5. Приклад програми роботи з файлами
- •6. Різниця при роботі з файлами у мовах Паскаль та с
- •Завдання
8. Використання текстових файлів для введення
Текстовий файл – це послідовність ASCII-символів, розділена на стрічки. Кожна попередня стрічка закінчується символом переходу на нову стрічку. Класи файлових потоків оснащений функціями для відкриття і закриття файлів, читання і запису стрічок тексту і виконання багатьох інших дій. В прикладі 4 показано, як відкрити файл, перевірити на помилки і вивести його вміст на дисплей.
Приклад 4. Читання і перевірка файлу на помилки
#include <iostream.h>
#include <fstream.h>
void main()
{
//відкриття існуючого файлу
ifstream help_file(“\\BC45\\README.TXT” );
//перевірка на помилки при відкритті файлу
if(!help_file)
{
cout << “\nCouldn’t open file \\BC45\\README”;
return;
}
//відображення вмісту файлу
while(help_file)
{
char buffer[100];
help_file.getline(buffer, sizeof(buffer));
cout << “\n” << buffer;
}
}
9.Виведення текстових файлів
Записувати файли майже так само легко, як і читати. Виникає невелика складність при відкритті файлу в режимі виводу, коли потрібно точно знати, як буде записуватися файл. По замовчуванню існуючий файл (в момент відкриття) врізається до нуля, але таку поведінку можна змінити. В прикладі 5 відкривається файл README.TXT, і його перші чотири стрічки копіюються в новий файл COPY.
Приклад 5. Проста програма запису в потік текстового файлу
#include <iostream.h>
#include <fstream.h>
void main()
{
//відкриття вже існуючого файлу
ifstream help_file(“\\BC45\\README.TXT”);
//відкриття файлу і його урізання до нуля
ofstream copy_file(“COPY”);
//перевірка на помилки відкриття
if(!help_file)
{
cout << “\nCouldn’t open file \\BC45\\README”;
return;
}
if(!copy_file)
{
cout << “\nCouldn’t open file COPY”;
return;
}
//копіювання перших чотирьох стрічок файлу README
while(help_file && copy_file)
{
char buffer[80];
help_file.getline(buffer, sizeof(buffer));
copy_file << buffer << “\n”;
if(++line_count == 4)
break;
}
}
Оператор
copy_file << buffer << “\n”;
записує у файл стрічку, що закінчується нулем, а потім додає символ нової стрічки так, щоб файл можна було читати за допомогою стандартного механізму вилучення стрічок. В файли виводу можна писати окремі символи і інші вбудовані типи даних, наприклад:
char c;
char* cp;
int i;
long l;
float f;
double d;
copy_file << c << cp << i << l << f << d;
Щоб відкрити файл для запису, не втративши при цьому існуючого в ньому тексту, потрібно використовувати режим додавання в кінець:
//відкриття вивідного файлу в режимі додавання в кінець
ofstream copy_file(“COPY”, ios::app);
10. Читання бінарних файлів
Дані в бінарних файлах не мають ніяких роздільників і спеціальних символів. Це також стосується символу ‘\0’. Таким чином, стрічки в бінарному файлі не закінчуються нульовим символом. Фактично самі стрічки в бінарному фалі не мають ніякого смислу. Бінарні файли потрібно обробляти не так, як текстові: в них немає службових символів, їх дані не організовані в стрічки з позначенням кінця кожної стрічки і серед даних можуть бути будь-які восьмибітові значення. Тим не менше, робота з бінарними файлами досить проста. Відкриття і закриття їх здійснюється точно так само, як і текстових файлів, за виключенням того, що в функцію відкриття передається флаг ios::binary. Цілком можливе відкриття текстового файлу в бінарному режимі. Нижче приведено відповідний приклад 6.