Файловые потоки. Открытие и закрытие

Последнее обновление: 31.03.2023

Для работы с файлами в стандартной библиотеке определен заголовочный файл fstream, который определяет базовые типы для чтения и записи файлов. В частности, это:

  • ifstream: для чтения с файла

  • ofstream: для записи в файл

  • fstream: совмещает запись и чтение

Для работы с данными типа wchar_t для этих потоков определены двойники:

  • wifstream

  • wofstream

  • wfstream

Открытие файла

При операциях с файлом вначале необходимо открыть файл с помощью функции open(). Данная функция имеет две версии:

  • open(путь)

  • open(путь, режим)

Для открытия файла в функцию необходимо передать путь к файлу в виде строки. И также можно указать режим открытия. Список доступных режимов открытия файла:

  • ios::in: файл открывается для ввода (чтения). Может быть установлен только для объекта ifstream или fstream

  • ios::out: файл открывается для вывода (записи). При этом старые данные удаляются. Может быть установлен только для объекта ofstream или fstream

  • ios::app: файл открывается для дозаписи. Старые данные не удаляются.

  • ios::ate: после открытия файла перемещает указатель в конец файла

  • ios::trunc: файл усекается при открытии. Может быть установлен, если также установлен режим out

  • ios::binary: файл открывается в бинарном режиме

Если при открытии режим не указан, то по умолчанию для объектов ofstream применяется режим ios::out, а для объектов ifstream - режим ios::in. Для объектов fstream совмещаются режимы ios::out и ios::in.

std::ofstream out;			// поток для записи
out.open("hello1.txt"); // окрываем файл для записи
	
std::ofstream out2;
out2.open("hello2.txt", std::ios::app); // окрываем файл для дозаписи

std::ofstream out3;
out2.open("hello3.txt", std::ios::out | std::ios::trunc); // установка нескольких режимов

std::ifstream in;		// поток для чтения
in.open("hello4.txt"); // окрываем файл для чтения

std::fstream fs;		// поток для чтения-записи
fs.open("hello5.txt"); // окрываем файл для чтения-записи

Однако в принципе необязательно использовать функцию open для открытия файла. В качестве альтернативы можно также использовать конструктор объектов-потоков и передавать в них путь к файлу и режим открытия:

fstream(путь)
fstream(путь, режим)

При вызове конструктора, в который передан путь к файлу, данный файл будет автоматически открываться:

std::ofstream out("hello.txt");
std::ifstream in("hello.txt");
std::fstream fs("hello.txt", std::ios::app);

В данном случае предполагается, что файл "hello.txt" располагается в той же папке, где и файл программы.

Вообще использование конструкторов для открытия потока является более предпочтительным, так как определение переменной, представляющей файловой поток, уже преполагает, что этот поток будет открыт для чтения или записи. А использование конструктора избавит от ситуации, когда мы забудем открыть поток, но при этом начнем его использовать.

В процессе работы мы можем проверить, окрыт ли файл с помощью функции is_open(). Если файл открыт, то она возвращает true:

std::ifstream in;		// поток для чтения
in.open("hello.txt"); // окрываем файл для чтения
// если файл открыт
if (in.is_open())
{
}

Закрытие файла

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

#include <iostream>
#include <fstream>

int main()
{
	std::ofstream out;			// поток для записи
	out.open("hello.txt"); // окрываем файл для записи
	out.close();			// закрываем файл

	std::ifstream in;		// поток для чтения
	in.open("hello.txt"); // окрываем файл для чтения
	in.close();				// закрываем файл

	std::fstream fs;		// поток для чтения-записи
	fs.open("hello.txt"); // окрываем файл для чтения-записи
	fs.close();				// закрываем файл
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850