До сих пор мы использовали стандартную библиотеку iostream
, которая предоставляет методы cin
и cout
для чтения со стандартного ввода и записи на стандартный вывод соответственно.
Этот учебник научит вас читать и писать из файла. Для этого требуется другая стандартная библиотека C ++ с именем fstream
, которая определяет три новых типа данных -
ofstream
Этот тип данных представляет поток выходных файлов и используется для создания файлов и для записи информации в файлы.
ifstream
Этот тип данных представляет поток входных файлов и используется для чтения информации из файлов.
fstream
Этот тип данных обычно представляет поток файлов и имеет возможности как потока, так и ifstream
, что означает, что он может создавать файлы, записывать информацию в файлы и читать информацию из файлов.
Для выполнения обработки файлов в C ++ файлы заголовков <iostream> и <fstream> должны быть включены в исходный файл C ++.
Открытие файла
Файл должен быть открыт, прежде чем вы сможете его прочитать или написать. Для открытия файла для записи может использоваться любой из объектов streamstream
или fstream
. И объект ifstream используется для открытия файла только для чтения.
Ниже приведен стандартный синтаксис функции open (), который является членом объектов fstream, ifstream
и ofstream
.
void open(const char *filename, ios::openmode mode);
Здесь первый аргумент указывает имя и местоположение файла, который должен быть открыт, а второй аргумент функции open()
определяет режим, в котором файл должен быть открыт.
ios::app
Добавить режим. Весь вывод в этот файл будет добавлен в конец.
ios::ate
Откройте файл для вывода и переместите элемент управления чтением/записью в конец файла.
ios::in
Откройте файл для чтения.
ios::out
Откройте файл для записи.
ios::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();
Запись в файл
Выполняя программирование на С ++, вы записываете информацию в файл из своей программы с помощью оператора вставки потока (<<) так же, как вы используете этот оператор для вывода информации на экран. Единственное отличие состоит в том, что вместо объекта cout вы используете объект ofstream
или fstream
.
Чтение из файла
Вы читаете информацию из файла в вашу программу, используя оператор извлечения потока (>>), так же, как вы используете этот оператор для ввода информации с клавиатуры. Единственное различие заключается в том, что вместо объекта cin вы используете объект ifstream
или fstream
.
Пример чтения и записи
Ниже приведена программа на 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 ()
, чтобы читать строку извне и игнорировать (), чтобы игнорировать лишние символы, оставленные предыдущим оператором чтения.
Указатели позиции файла
Оба IStream
и ostream
обеспечивают функции члена для изменения положения указателя файла позиция. Этими функциями-членами являются seekg («seek get»)
для istream
и seekp («seek put»)
для ostream
.
Аргумент seekg и seekp обычно является длинным целым числом. Второй аргумент может быть указан для указания направления поиска. Направление поиска может быть ios :: beg
(по умолчанию) для позиционирования относительно начала потока, ios :: cur
для позиционирования относительно текущей позиции в потоке или ios :: endдля позиционирования относительно конца поток.
Указатель позиции файла представляет собой целочисленное значение, определяющее местоположение в файле как количество байтов из исходного местоположения файла. Некоторые примеры позиционирования указателя "get" file-position
-
// 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 );
0 комментариев