ТОП 10:

Загальна характеристика роботи з файлами



Ваша програма може одержати доступи до файлів двома засобами: послідовним і довільним. У програмі необхідно дізнатися, яким методом Ви збираєтеся користуватися при роботі з файлами.

Доступ до інформації в послідовному файлі здійснюється в такому порядку, у якому робився запис. Таким чином, послідовний файл є аналогом магнітної стрічки на касеті: Ви відтворюєте музику в тому порядку, у якому вона була записана. (Ви можете швидко перемотати вперед або назад пісні, що не хочете слухати, але порядок цих пісень диктує Вам, що потрібно зробити, щоб послухати ту композицію, що Ви хочете.)

Вставити дані в середину послідовного файла важко, а іноді практично неможливо.

На відміну від послідовних файлів звертання до інформації у файлах із довільним доступом може здійснюватися в будь-якому порядку. Уявіть собі дані в модулі з довільним доступом, коли вибирається меню на компакт-диску або платівці: Ви можете безпосередньо запустити будь-яку комбінацію, не програючи або перемотуючи всі інші. Якщо Ви хочете спочатку послухати першу пісню, потім шосту і після цього четверту, то можете зробити це без особливих проблем.

 

Послідовні файли

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

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

Формат:

fs_obj. open(file_name, access);

fs_obj. close();

fs_obj – об’єкт, що являє собою файл.

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

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

Таблиця 7

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

Режим Опис Код
ios::in Відкрити файл для читання
ios::out Відкрити файл для запису
ios::ate Відкрити файл і встановити вказівку на кінець
ios::app Відкрити файл для додавання
ios::trunc Видалити уміст файла
ios::nocreate Якщо немає файла, повертає відмову
ios::noreplace Якщо файл є, його відкриття тільки для додавання
ios::binary Відкрити файл у двоічному режимі

 

Якщо Ви відкриваєте файл для запису з опцією ios::out, C++ просто створює його. Якщо файл із цим ім’ям вже існує, C++ без усякого попередження перекриває старий, знищуючи його вміст.

Якщо Ви хочете, щоб спроба відкрити файл tt. txt завершилася відмовою, у випадку, якщо файл не існує, використовуйте:

 

cur_fs. open(“tt. txt”,ios::out | ios::nocreate)

 

Режим доступу до файлів по умовчанню - текстовий ASCII-файл.

Якщо заданий двоічний режим, він коротше, більш компактний, дані записуються в двоічному машинному уявленні.

Скажімо

 

int i = 31764;

 

для ASCII - коду - це 5 символів,

для двоічного машинного уявлення - це 2 байта. Цей файл може читатися в C++ і є системно залежним. На машині іншого типу може не читатися.

Якщо під час відкриття файла відбувається помилка, об’єкт файлового потоку буде дорівнювати нулю.

Наприклад: якщо Ви відкриваєте файл з опцією ios::nocreate і заданий файл не існує, С++ не відкриває цей файл. Виникнення помилки можна простежити у такий спосіб:

 

if(! cur_fs) cout << «FILE ... .. НЕМАЄ»;

 

Рекомендації: Краще відкривати файли перед їхнім використанням і закривати відразу ж після використання.

Запис у файл.

Найбільш розповсюдженні функції файлового введення-виведення:

get();

put().

 

Приклади:

Приклад 1.

 

#include <fstream.h>

ofstream fp;

 

Void main()

{

fp.open(«nam.dat», ios::out);

 

fp<< «Петров Сергій \n»;

fp<< «Сидоров Іван \n»;

 

fp.close();

}

 

Виконати команду DOS

type nam. dat:

Петров Сергій

Сидоров Іван

 

Приклад 2. Запис у файл цифр від 1 до 100

 

#include <fstream.h>

ofstream fp;

 

Void main()

{

int i;

// Створення нового файла

fp.open(“nam.dat”, ios::out);

 

if(!fp)

cout << “Помилка файла \n”;

else

{

for(i = 1; i < 101; i++)

fp << i << “ “;

}

fp.close();

}

Виведення на принтер.

Принтер, також як і екран, можна розглядати як аналогію з файлом.

Приклад:

 

#include <fstream.h>

ofstream prn;

 

Void main()

{

prn.open(«LTP1»,ios::out);

prn << “Міша \n”;

prn << “Петро \n”;

prn.close();

}

 

Виведення:

Міша

Петро

Додавання у файл і читання з файла.

Приклад. Додати 3 прізвища у файл, у котрому вже є 2 прізвища:

Петров

Сидоров

 

#include <fstream.h>

ofstream fp;

 

Void main()

{

fp.open(“name.dat”, ios::app);

fp << “Козлов \n”;

fp << “Ромін \n Кравенко \n”;

fp.close();

}

Якщо файл name. dat не існує, то створюється новий із трьома прізвищами.

Приклад. Програма запитує в користувача ім’я файла і виводить його вміст на екран.

 

#include <fstream.h>

#include <stdlib.h>

 

fstream fp;

 

Void main()

{

char filename[12];

char in_char;

cout << «Введіть ім’я файла»;

cin >> filename;

fp.open(filename, ios::in);

if(!fp)

{

cout << «\n Помилка, файл не відкривається \n»;

exit(0); //Вихід із програми

}

while(fp.get(in_char))

cout << in_char;

fp.close();

}

 

Приклад. Копіювання даних з одного файла в інший:

 

#include <fstream.h>

#include <stdlib.h>

 

ifstream in_fp;

ofstream out_fp;

 

Void main()

{

char in_char;

char in_file[12];

char out_file[12];

cout << “Введіть ім’я файла ”;

cin >> in_file;

 

cout << “Введіть ім’я файла “;

cin >> out_file;

 

in_fp.open(in_file, ios::in);

if(!in_fp)

{

cout << “\n\n** Does not exist**\n”;

exit(0);

}

out_fp.open(in_file, ios::out);

if(!out_fp)

{

cout << “\n\n** Error opening **\n”;

exit(0);

}

cout << “\n Копіювання \n”;

while(in_fp.get(in_char))

out_fp.put(in_char);

out_fp.close();

in_fp.close();

}

 







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.226.243.36 (0.011 с.)