Файлова система C++. Загальні принципи роботи. Приклади. Відкриття/закриття файлу
Зміст
- 1. Підключення доступу до класів роботи з файловою системою C++
- 2. Створення файлового потоку. Яким чином здійснюється зв’язок потоку з файлом? Функція open()
- 3. Способи відкриття файлу. Функція openmode()
- 4. Функція is_open(). Перевірка відкриття файлу. Приклад
- 5. Функція close(). Закриття файлу. Приклад
- 6. Приклади відкриття/закриття файлу функцією open(). Перевірка відкриття файлу функцією is_open()
- Зв’язані теми
Пошук на інших ресурсах:
1. Підключення доступу до класів роботи з файловою системою C++
Файлове введення/виведення є частиною загальної системи введення/виведення мови C++. Для того, щоб у програмі можна було використовувати файлове введення/виведення попередньо має бути підключений модуль fstream
#include <fstream>
У цьому модулі реалізовані основні класи для роботи з файловою системою:
- ifstream – використовується для організації введення з файлового потоку;
- ofstream – використовується для організації виведення у файл (файловий потік);
- fstream – використовується для забезпечення введення/виведення.
⇑
2. Створення файлового потоку. Яким чином здійснюється зв’язок потоку з файлом? Функція open()
Щоб створити файловий потік потрібно оголосити екземпляр одного з класів ifstream, ofstream або fstream
// оголошення екземплярів класів для різних видів потоків ifstream is; // потік введення ofstream os; // потік виведення fstream fs; // потік введення/виведення
Створений потік зв’язується з файлом з допомогою функції open(), яка має різні реалізації у різних класах.
У класі ifstream функція open() має таку реалізацію
ifstream::open(const char* filename, ios::openmode mode = ios::in);
тут
- filename – ім’я файлу, який відкривається. Ім’я може бути повним або скороченим, наприклад, “myfile.txt”;
- mode – спосіб відкриття файлу. Цей параметр приймає значення ios::in, яке описується у функції openmode(). Значення ios::in означає, що файл відкривається тільки для введення.
У класі ofstream функція open() має наступний прототип
ifstream::open(const char* filename, ios::openmode mode = ios::out | ios::trunc);
тут
- filename – ім’я файлу, який виводиться;
- mode – параметр, що задає спосіб відкриття файлу. У цьому параметрі значення ios::out означає, що файл відкривається для виведення. Значення ios::trunc означає, що попередній вміст існуючого файлу з таким самим іменем буде видалений, а довжина файлу стане рівною нуль.
У класі fstream прототип функції open() наступний
ifstream::open(const char* filename, ios::openmode mode = ios::in | ios::out);
тут
- filename – ім’я файлу;
- mode – параметр, що задає спосіб відкриття файлу. Як видно зі значення параметру mode, файл відкривається і для запису і для читання.
⇑
3. Способи відкриття файлу. Функція openmode()
Способи відкриття файлу можуть бути різними. Значення, що описують способи відкриття файлу, реалізовані в функції openmode(). Нижче наведено значення, які можуть повертатись функцією openmode() та пояснення до них:
- ios::app – дані, що записуються, дописуються в кінець файлу;
- ios::ate – при відкритті файлу відбувається пошуку кінця файлу. Але запис у файл може здійснюватись в будь-яке місце цього файлу;
- ios::binary – дозволяє відкрити файл у бінарному (двійковому) режимі. Існує два режими відкриття файлу: текстовий та бінарний. За замовчуванням файли відкриваються у текстовому режимі;
- ios::in – файл відкривається для введення (відбувається читання з файлу);
- ios::out – файл відкривається для виведення (відбувається запис у файл);
- ios::trunc – означає, що попередній вміст існуючого файлу з таким самим іменем буде видалений, а довжина файлу стане рівною нуль. Якщо відкрити потік виведення з допомогою класу ofstream увесь вміст файлу з таким самим іменем стирається.
Способи відкриття файлу можна комбінувати між собою з допомогою операції | (побітове АБО).
Приклад. Способи відкриття файлу.
// комбінування значень, що визначають спосіб відкриття файлу // 1. Відкриття файлу для виведення (запис у файл) ofstream outFile; outFile.open("myfile.txt", ios::out); // 2. Відкриття файлу для виведення - спрощений варіант (запис у файл) outFile.open("myfile.txt"); // 3. Відкриття файлу для введення (читання з файлу) ifstream inFile; inFile.open("myfile.txt", ios::in); // 4. Відкриття файлу для введення - спрощений варіант (читання з файлу) inFile.open("myfile.txt");
⇑
4. Функція is_open(). Перевірка відкриття файлу. Приклад
Функція is_open() призначена для перевірки, чи закрито файл чи ні. Ця функція реалізована у класах ifstream, ofstream та fstream.
Функція має наступний прототип:
bool is_open();
Функція повертає true, якщо потік зв’язаний з відкритим файлом. В іншому випадку функція повертає false.
Приклад. Демонструється визначення відкриття файлу для об’єкту os класу ofstream. Якщо файл відкрито, то цей файл закривається.
ofstream os; // оголосити об’єкт класу ofstream string filename = "myfile.txt"; // спроба відкриття файлу os.open(filename); if (!os.is_open()) { // файл не відкрито cout << "Файл не відкрито." << endl; } else { // Вивести повідомлення cout << "Файл відкрито. Робота з файлом." << endl; cout << "Закриття файлу. " << endl; // закрити файл os.close(); }
⇑
5. Функція close(). Закриття файлу. Приклад
Щоб закрити файл, потрібно викликати функцію close().
Наприклад. Нижче продемонстровано відкриття та закриття файлу для потоку ifstream
ifstream is; // оголосити екземпляр класу ifstream is.open("myfile.txt"); // відкрити файл для читання is.close(); // закрити файл
⇑
6. Приклади відкриття/закриття файлу функцією open(). Перевірка відкриття файлу функцією is_open()
Відкрити файл можна одним з двох способів:
- з допомогою функції open();
- з допомогою конструктора класу (див. приклади нижче).
Якщо файл відкрито, то можна реалізовувати роботу з цим файлом. Можлива ситуація, що файл не буде відкритий після виклику функції f_open(). У цьому випадку у програмі потрібно реалізувати відповідну перевірку.
Коректність відкриття файлу можна реалізувати одним з двох способів, які наведено нижче
- з допомогою відповідної перевірки оператором умовного переходу if;
- з допомогою функції is_open().
Приклад 1. Відкриття файлу для виведення (запису).
#include <iostream> #include <fstream> using namespace std; // Відкрити, закрити файл - клас ofstream void OpenCloseFileOutput() { ofstream outFile; outFile.open("myfile3.txt", ios::out); if (outFile) { // Робота з файлом // ... outFile.close(); } }
Приклад 2. Відкриття файлу для введення (читання).
// Відкрити, закрити файл - клас ifstream void OpenCloseFileInput() { // автоматичне відкриття файлу з допомогою конструктора ifstream inFile("myfile6.txt",ios::in); if (inFile) { // Робота з файлом // ... inFile.close(); } }
Приклад 3. Відкриття файлу для виведення (запису). Використання функції is_open().
// функція is_open(), відкриття файлу для запису в нього void DemoIsFileOpenOutput() { ofstream os; // оголосити об’єкт класу ofstream string filename = "myfile6.txt"; // спроба відкриття файлу os.open(filename); if (!os.is_open()) { // файл не відкрито cout << "File is not opened." << endl; } else { // Вивести повідомлення cout << "File is opened. Working with file." << endl; cout << "Close the file. " << endl; // Робота з файлом // ... // закрити файл os.close(); } }
Приклад 4. Відкриття файлу для введення (читання). Використання функції is_open().
// відкриття файлу для введення з нього void DemoIsFileOpenInput() { ifstream is; // оголосити об'єкт класу ifstream string filename = "myfile6.txt"; // спроба відкриття файлу is.open(filename); if (!is.is_open()) { cout << "File is not opened." << endl; } else { // вивести повідомлення cout << "File is opened. Working with file" << endl; cout << "Close the file." << endl; is.close(); } }
⇑
Зв’язані теми
⇑