Latest web development tutorials

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

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

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

数据类型 描述
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

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

Открыть файл

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

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

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

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

模式标志 描述
ios::app 追加模式。所有写入都追加到文件末尾。
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

Можно использовать комбинацию из двух или нескольких из указанных выше способов. Например, если вы хотите, чтобы открыть файл в режиме записи и хотите усечь файл, чтобы предотвратить файл уже существует, вы можете использовать следующий синтаксис:

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

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

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

Закройте файл

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

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

void close();

Запись в файл

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

Прочитайте файл

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

Читать и писать примеры

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

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

   // 以写模式打开文件
   ofstream outfile;
   outfile.open("afile.dat");

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

   // 向文件写入用户输入的数据
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;

   // 关闭打开的文件
   outfile.close();

   // 以读模式打开文件
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 

   // 关闭打开的文件
   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обеспечивают функции члена для перестановки позиции указателя файла. К ним относятся около IStream функций членовseekg ( "стремятся получить") и на ostream seekp ( "поиск ставить").

seekg seekp и аргумент обычно представляет собой длинное целое. Второй параметр может быть использован, чтобы указать направление поиска. Найти направление может бытьИОС :: бек ( по умолчанию,позиционирование с самого начала потока), это может бытьИОС :: CUR (позиционированиеиз текущей позиции потока), это может бытьИОС :: конца (отконца потока запускается позиционирование).

Указатель позиции файла представляет собой целое значение, которое задает число байтов от начала файла до расположения указателя. Здесь таргетинг "получить" позиции файла экземпляра указателя:

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );

// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );

// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );

// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );