Файловая система 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(), открытие файла для записb в него 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(); } }
⇑
Связанные темы
⇑