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

6 Робота з файлами

6.1 Ціль роботи

Навчитися виконувати типові операції з файлами: створення, перегляд і коректування.

6.2 Методичні вказівки по організації самостійної роботи

У процесі підготовки до лабораторної роботи рекомендується вивчити порядок опису файлу, передачу даних у файл і їхнє читання [ 2, c.88 – 95; 3, с.431-444; конспект лекцій ] . .

Як елементи файлу можна використовувати будь-які дані мови С++ (числа, символи, рядки, масиви і структури).

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

У процесі введення-виведення з використанням стандартних пристроїв (клавіатури й екрана) у програму варто включити заголовний файл iostream.h, у якому міститься опис відповідного класу iostream, тобто на початку тексту програми поміщають директиву :

#include <iostream.h>

Файлове введення-виведення і необхідні функції-члени введення-виведенняописані в заголовному файлі fstream, що містить опис основних класів і методів.

Існують також додаткові файли бібліотеки введення-виведення, що містять більш спеціалізовані функції – члени введення-виведення.

Для відкриття файлу на диску використовується функція-член класу fstream, що має наступний прототип (заголовок):

void open (const char *filename, int mode, int m = flebuf :: openprompt);

де filename  ім'я файлу, що відкривається, у якому при необхідності можна вказати шлях;

mode  параметр, що задає режим уведення , у файлі fstream визначені значення цього режиму і їхній зміст;

m  параметр, що задає захист файлу, що за замовчуванням приймає значення, заданий константою filebuf :: openprompt ;

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

ios :: app  файл (потік) відкривається для додавання ("а");

ios :: in  файл відкривається для читання (" r ") ;

ios :: out  файл відкривається для запису ("w ");

ios :: ate  відкрити файл і установити покажчик потоку на кінець файлу;

ios :: binary  відкрити файл у двійковому режимі ("у");

ios :: trunc  відкрити файл і видалити уміст файлу ;

ios :: nocreate  відкрити існуючий файл, якщо він не існує 

операцію завершити відмовленням;

ios :: noreplace  якщо файл існує  видати повідомлення про помилку, за винятком випадків пошуку кінця або файлу додавання у файл.

Розглянемо деякі приклади записів функцій відкриття файлу :

#include <fstream.h>

main ( )

{

fstream fp; // опис файлової змінної;

// відкривається файл myfile.dat для запису, тобто створюється новий файл;

fp. open ( " a : \ cpp \ myfile.dat " , ios :: out)

// відкривається раніше створений файл file2.dat для читання даних;

fp.open (" c : \ vp \ file2.dat ", ios :: in );

// відкривається файл для читання або запису з використанням

// дввійкового режиму;

fp .open (" myfile " , ios :: out | ios :: in | ios :: binary);

………………………………………………………………

}

Файлова змінна fp повинна бути попередньо описана як об'єкт класу fstream або ofstream . Якщо під час відкриття файлу відбувається помилка, то завжди fp = 0, тобто файлова перемінн-об'єкт дорівнює нулю (не NULL ). Це використовується для визначення результату відкриття файлу в такий спосіб :

#include <fstream.h>

main ( )

{

ofstream . fp;

fp.open ( " Filename " , ios :: app); // Додати у файл

if (!fp )

{

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

exit (0);

} // Вихід із програми

else

{

// Текст програми роботи з файлом

}

}

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

while ( ! fp.eof ( ))

{……………

…………...}

Приклад 6.1 Записати у файл п'ять прізвищ.

//P5_1.CPPзапис у файл п'яти прізвищ

#include < fstream .h >

ofstream fp;

main ( )

{

fp.open ( " a : \ Myfile " , ios :: out); // Створення нового файлу

fp << " Авдєєв А.И. " << endl;

fp << " Бобрів А.П. " << endl;

fp << " Кузьмін И.В. " << endl;

fp << " Попов Р.Л. " << endl;

fp << " Яковлев Ю.Т. " << endl;

fp. close ( ); // Закриття файлу

}

Цей фрагмент краще записати у вигляді:

#include < fstream.h >

ofstream fp;

main ( )

{

char s [ 5][15];

fp . open ( " a :\ Myfile1 " , ios :: out);

for ( int i = 0; i < 5 ; i++ )

fp. getline ( s [ i ] )

fp. close;

}

Відкривати файли можна й інакше, наприклад, використовуючи класи ifstream  для читання з файлу (тобто введення) і ofstream  для запису у файл (тобто виведення з ОЗП) :

ifstream in ( " Namefile "); // відкриття файлу для читання з файлу

ofstream out ( " Namefile2 "); // відкриття файлу для запису у файл ,

де in і out  файлові змінні відповідного класу.

Приклад 6.2 Копіювання одного текстового файлу в інший файл.

// P5_2.CPP копіювання текстового файлу file1 у файл file2

#include <iostream.h>

#include <fstream.h>