Головна

ОСНОВИ файлового вводу-виводу

  1.  I. Основи молекулярно-кінетичної теорії
  2.  V. ЗАБУТІ ОСНОВИ
  3.  А. Основи християнського життя
  4.  Адміністративно-правові основи діяльності виконавчої влади в галузі культури.
  5.  Адміністративно-правові основи діяльності виконавчої влади по керівництву охороною здоров'я.
  6.  Адміністративно-правові основи діяльності виконавчої влади по керівництву наукою.
  7.  Адміністративно-правові основи організації митної справи.

Для реалізації файлового введення-виведення, необхідно включити в програму заголовки fstream.h. У ньому визначено кілька класів, включаючи ifstream, ofstream, fsream. Ці класи є похідними класів istream, ostream. класи istream, ostream похідні класу ios, тому ifstream, ofstream, fsream також мають доступ до всіх операцій, що визначаються в класі ios.

Файл відкривається при зв'язуванні його з потоком. Є три типи потоків: вхідний, вихідний і вхідний / вихідний. Перед тим як відкрити файл, потрібно, по-перше, створити потік. Для створення вхідного потоку необхідно оголосити потік класу ifstream. Для створення вихідного - оголосити потік класу ofstream. Потоки, які реалізують і введення, і висновок, повинні оголошуватися як об'єкти класу fstream. Наприклад, в наступному фрагменті створюється один вхідний потік, один вихідний потік і один потік для введення і виведення:

ifstream in; // введення

ofstreaiv; cut; // вивід

fstream io; // Введення і виведення

Після створення потоку, одним із способів зв'язати його з файлом є функція ореп (). Ця функція є членом кожного з трьох потокових класів. Формат функції:

void open (char * filename, int mode, int access);

тут filename - ім'я файлу, в який можна включити шлях. величина mode задає спосіб відкриття файлу. Спосіб визначається наступними значеннями, успадкованими класом fstream: ios :: app, ios :: ate, ios :: binary, ios :: in, ios :: nocreate, ios :: noreplace, ios :: out, ios :: trunk.

Для об'єднання двох і більше значень використовується оператор OR. Розглянемо, що означає кожне з цих значень.

метод ios :: app викликає відкриття файлу в режимі додавання в кінець файлу.

значення ios :: binary викликає відкриття файлу в двійковому режимі. За замовчуванням, всі файли відкриваються в текстовому режимі.

режим ios :: in визначає відкриття файлу для введення. прапор ios :: out показує, що файл відкривається для виводу. Створення потоку з використанням ifstream забезпечує введення, а створення потоку з використанням ofstream забезпечує висновок, тому, в таких випадках, зазначені величини використовувати необов'язково.

Використання ios :: nocreate призводить до того, що функція ореп () повертає помилку, якщо файлу до сих пір не існує. Використання ios :: noreplace призводить до того, що функція ореп () повертає помилку, якщо файл вже існує.

Використання ios :: trunc призводить до видалення вмісту раніше існуючого файлу з тією ж назвою і усічення його до нульової довжини.

параметр access задає права доступу до файлу. За замовчуванням для DOS / Windows значення access дорівнює 0. Коди представлені в наступній таблиці:

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

У наступному фрагменті відкривається звичайний вихідний файл у середовищі DOS / Windows:

ofstream out;

out.open ( "test", iоs :: out, 0);

Однак ви рідко зустрінете (якщо зустрінете взагалі) функцію ореп () в такій формі, як тут показано, оскільки обом параметрам mode и access значення задаються за умовчанням. Тому попередній оператор частіше буде виглядати так:

out.open ( "test"); // За замовчуванням для звичайного вихідного файлу

Щоб відкрити потік для введення і виведення, необхідно задати для mode обидва значення: ios :: in и ios :: out, Як показано в наступному прикладі. (Тут значення за замовчуванням для mode не ставить.)

fstream mystream;

mystream.open ( "test", ios :: in | ios :: out);

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

if (! mystream)

{Cout << "Файл відкрити невозможнo \ n";

// Помилка відкриття файлу

}

класи ifstream, ofstream и fstream містять конструктори, які відкривають файл автоматично. Конструктори мають ті ж параметри, що і функція ореп (). Тому чаші ви будете користуватися таким способом відкриття файлу:

 ifstream mystream ( "myfile"); // Відкриття файлу введення

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

Для закриття файлу використовуйте функцію-член close (). Наприклад, щоб закрити файл, пов'язаний з потоком mystream, Користуйтеся таким оператором:

 mystream. close ();

функція close () не має параметрів і значення, що повертається.

Використовуючи функцію-член eof (), можна визначити, чи був, досягнутий кінець файлу при введенні. Прототип цієї функції: int eof ();

Вона повертає нульове значення в тому випадку, якщо було досягнуто кінець файлу; в іншому випадку функція повертає нуль.

Після того як файл відкритий, дуже легко вважати або записати в нього текстові дані. Просто використовуйте оператори << і >> так само, як це робилося для введення / виведення на екран, за винятком того, замість cin и cout використовується пов'язаний з файлом потік. При читанні і запису файлів з використанням << і >> також використовуються і функції мови С: fprintf () и fscanf (). Вся інформація у файлі зберігається в тому ж форматі, як якщо б вона виводилася на екран. Отже, файл, який створюється за допомогою операції <<, являє собою файл з відформатованим текстом, і навпаки, будь-який файл, який зчитується за допомогою операції >>. повинен бути файлом з відформатованим текстом.

приклади:

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

#include

#include

main ()

{Ofstream fout ( "test"); // Створення звичайного файлу виводу

if (! fout)

{Cout << "Файл відкрити неможливо \ n";

return 1;

}

fout << "Привіт! \ п";

fout << 100 << '' << hex << 100 << endl;

fout.close ();

ifstream fin ( "test"); // Відкриття звичайного файлу введення

if (! fin)

{Cout << Файл відкрити неможливо \ n ";

return 1;

}

char str [80];

int i;

fin >> str >> i;

cout << str << '' << i << endl;

fin.close ();

return 0;

}

Після завершення програми вміст файлу test буде наступним:

 Вітання!

100 64

Як уже встановлено, при використанні операторів << і >> для реалізації файлового введення / виводу, інформація форматується так само, як це робилося б при виведенні на екран.

2. Наступним є інший приклад дискового введення / виводу. Ця програма зчитує введені з клавіатури рядка і записує їх у файл. Програма завершується при введенні порожнього рядка.

#include

#include

#include

main ()

{Ofstream fout ( "test"); // Створення звичайного файлу виводу

if (! fout)

{Cout << "Файл відкрити неможливо \ n";

return 1;

}

char str [80];

cout << "Введіть рядки в файл; для закінчення натисніть ENTER \ n";

do

{Cout << ":";

gets (str);

out << str << endl;

} While (* str);

out .close ();

return 0;

}



 ФУНКЦІЇ ВСТАВКИ І ВИЛУЧЕННЯ |  Неформатіруемий двійковий введення / виведення

 структури |  Імя_структури. імя_елемента |  Структури і функції |  динамічні структури |  Структура пов'язаного двонаправленого списку |  Int fseek (FILE * stream, long offset, int origin). |  інкапсуляція |  спадкування |  МАНІПУЛЯТОРИ ВВЕДЕННЯ-ВИВЕДЕННЯ |  Додаткову інформацію про функції двійкового введення / виведення |

© um.co.ua - учбові матеріали та реферати