До сих пор мы использовали стандартную библиотеку 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, программа считывает информацию из файла и выводит ее на экран —
#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» указателя позиции файла: