Учебники

C ++ файлы и потоки

До сих пор мы использовали стандартную библиотеку iostream , которая предоставляет методы cin и cout для чтения из стандартного ввода и записи в стандартный вывод соответственно.

Этот урок научит вас, как читать и писать из файла. Для этого требуется другая стандартная библиотека C ++ под названием fstream , которая определяет три новых типа данных —

Sr.No Тип данных и описание
1

ofstream

Этот тип данных представляет поток выходных файлов и используется для создания файлов и записи информации в файлы.

2

ifstream

Этот тип данных представляет поток входных файлов и используется для чтения информации из файлов.

3

fstream

Этот тип данных представляет файловый поток в целом и обладает возможностями как ofstream, так и ifstream, что означает, что он может создавать файлы, записывать информацию в файлы и считывать информацию из файлов.

ofstream

Этот тип данных представляет поток выходных файлов и используется для создания файлов и записи информации в файлы.

ifstream

Этот тип данных представляет поток входных файлов и используется для чтения информации из файлов.

fstream

Этот тип данных представляет файловый поток в целом и обладает возможностями как ofstream, так и ifstream, что означает, что он может создавать файлы, записывать информацию в файлы и считывать информацию из файлов.

Для выполнения обработки файлов в C ++ файлы заголовков <iostream> и <fstream> должны быть включены в исходный файл C ++.

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

Файл должен быть открыт перед тем, как вы сможете читать из него или писать в него. Любой объект ofstream или fstream может быть использован для открытия файла для записи. И если поток объекта используется, чтобы открыть файл только для чтения.

Ниже приведен стандартный синтаксис функции open (), которая является членом объектов fstream, ifstream и ofstream.

void open(const char *filename, ios::openmode mode);

Здесь первый аргумент указывает имя и местоположение файла, который нужно открыть, а второй аргумент функции-члена open () определяет режим, в котором файл должен быть открыт.

Sr.No Флаг и описание режима
1

ИОС :: приложение

Добавить режим. Весь вывод в этот файл будет добавлен в конец.

2

ИОС :: ели

Откройте файл для вывода и переместите элемент управления чтения / записи в конец файла.

3

ИОС :: в

Откройте файл для чтения.

4

ИОС :: из

Откройте файл для записи.

5

ИОС :: TRUNC

Если файл уже существует, его содержимое будет обрезано перед открытием файла.

ИОС :: приложение

Добавить режим. Весь вывод в этот файл будет добавлен в конец.

ИОС :: ели

Откройте файл для вывода и переместите элемент управления чтения / записи в конец файла.

ИОС :: в

Откройте файл для чтения.

ИОС :: из

Откройте файл для записи.

ИОС :: TRUNC

Если файл уже существует, его содержимое будет обрезано перед открытием файла.

Вы можете объединить два или более из этих значений, ИЛИ объединяя их. Например, если вы хотите открыть файл в режиме записи и хотите обрезать его в случае, если он уже существует, следующий синтаксис —

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

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

fstream  afile;
afile.open("file.dat", ios::out | ios::in );

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

Когда программа на C ++ завершает свою работу, она автоматически сбрасывает все потоки, освобождает всю выделенную память и закрывает все открытые файлы. Но всегда полезно, чтобы программист закрывал все открытые файлы до завершения программы.

Ниже приведен стандартный синтаксис для функции close (), которая является членом объектов fstream, ifstream и ofstream.

void close();

Запись в файл

При программировании на C ++ вы записываете информацию в файл из вашей программы, используя оператор вставки потока (<<), так же, как вы используете этот оператор для вывода информации на экран. Единственное отличие состоит в том, что вы используете объект ofstream или fstream вместо объекта cout .

Чтение из файла

Вы читаете информацию из файла в вашу программу, используя оператор извлечения потока (>>), так же, как вы используете этот оператор для ввода информации с клавиатуры. Единственное отличие состоит в том, что вы используете объект ifstream или fstream вместо объекта cin .

Пример чтения и записи

Ниже приводится программа C ++, которая открывает файл в режиме чтения и записи. После записи информации, введенной пользователем, в файл с именем afile.dat, программа считывает информацию из файла и выводит ее на экран —

Live Demo

#include <fstream>
#include <iostream>
using namespace std;
 
int main () {
   char data[100];

   // open a file in write mode.
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // write inputted data into the file.
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // again write inputted data into the file.
   outfile << data << endl;

   // close the opened file.
   outfile.close();

   // open a file in read mode.
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // write the data at the screen.
   cout << data << endl;
   
   // again read the data from the file and display it.
   infile >> data; 
   cout << data << endl; 

   // close the opened file.
   infile.close();

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий пример ввода и вывода —

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

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

Указатели положения файла

И istream, и ostream предоставляют функции-члены для изменения положения указателя положения файла. Эти функции-члены являются seekg («seek get») для istream и seekp («seek put») для ostream.

Аргумент для поиска и поиска обычно является длинным целым числом. Второй аргумент может быть указан для указания направления поиска. Направление поиска может быть ios :: beg (по умолчанию) для позиционирования относительно начала потока, ios :: cur для позиционирования относительно текущей позиции в потоке или ios :: end для позиционирования относительно конца поток.

Указатель положения файла представляет собой целочисленное значение, которое указывает местоположение в файле в виде количества байтов от начального местоположения файла. Некоторые примеры позиционирования «get» указателя позиции файла: