Файлы и потоки C++
До сих пор мы использовали iostream стандартная библиотека, которая предоставляет cin и выйти методы чтения из стандартного ввода и записи в стандартный вывод соответственно.
Этот учебник научит вас, как читать и писать из файла. Для этого требуется другая стандартная библиотека C++ с именем fstream. , который определяет три новых типа данных —
Старший № | Тип данных и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
Для выполнения обработки файлов на C++ заголовочные файлы
Открытие файла
Файл должен быть открыт, прежде чем вы сможете читать из него или писать в него. Либо из потока или fstream объект может использоваться для открытия файла для записи. И объект ifstream используется для открытия файла только для чтения.
Ниже приведен стандартный синтаксис функции open(), которая является членом объектов fstream, ifstream и ofstream.
void open(const char *filename, ios::openmode mode);
Здесь первый аргумент указывает имя и местоположение открываемого файла, а второй аргумент функции open() функция-член определяет режим, в котором файл должен быть открыт.
Старший № | Флажок и описание режима |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>
Вы можете объединить два или более из этих значений с помощью ИЛИ соединяя их вместе. Например, если вы хотите открыть файл в режиме записи и хотите обрезать его, если он уже существует, следующий будет синтаксис —
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 или фстрим объект вместо cout объект.
Чтение из файла
Вы читаете информацию из файла в свою программу, используя оператор извлечения потока (>>), точно так же, как вы используете этот оператор для ввода информации с клавиатуры. Единственное отличие состоит в том, что вы используете ifstream или фстрим объект вместо 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 и стрим предоставить функции-члены для изменения положения указателя позиции в файле. Эти функции-члены:seekg ("seek get") для istream и seekp («искать») для ostream.
Аргумент для seekg и seekp обычно представляет собой длинное целое число. Второй аргумент может быть указан для указания направления поиска. Направление поиска может быть ios::beg (по умолчанию) для позиционирования относительно начала потока, ios::cur для позиционирования относительно текущей позиции в потоке или ios::end для позиционирования относительно конца потока.
Указатель позиции файла — это целочисленное значение, указывающее положение в файле как количество байтов от начального положения файла. Вот несколько примеров позиционирования указателя позиции файла «get» —
// position to the nth byte of fileObject (assumes ios::beg) fileObject.seekg( n ); // position n bytes forward in fileObject fileObject.seekg( n, ios::cur ); // position n bytes back from end of fileObject fileObject.seekg( n, ios::end ); // position at end of fileObject fileObject.seekg( 0, ios::end );
Язык C