Latest web development tutorials

C ++ fichiers et flux

Jusqu'à présent, nous avons utilisé la bibliothèqueiostream standard, qui fournit des méthodes de flux de cinetcoutismesont utilisés pour lire l'entrée standard et écrire dans le flux de sortie standard.

Ce tutoriel vous montre comment lire le flux à partir du fichier et écrire des flux de fichiers. Voilà où un autrefstream bibliothèque standard C ++,il définit trois nouveaux types de données:

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

Pour déposer la manipulation en C ++, vous devez inclure le fichier d'en-tête dans le fichier C ++ code source <iostream> et <fstream>.

Ouvrez le fichier

Avant de lire les informations du fichier ou écrire dans un fichier, vous devez d'abord ouvrir le fichier.ofstream et fstreamobjets peuvent être utilisés pour ouvrir le fichier pour l' écriture, si vous avez seulement besoin d'ouvrir le fichier pour la lecture, utilisez l'objetifstream.

Voici la fonction open () est la syntaxe standard, la fonction open () est un membre de fstream, ifstream et ofstream objets.

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

Ici, ouvert) fonction (membre du premier paramètre pour spécifier le nom et l' emplacement du fichier que vous souhaitez ouvrir, et le second paramètre définit le fichier est en mode ouvert.

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

Vous pouvez utiliser une combinaison de deux ou plusieurs des modes ci-dessus. Par exemple, si vous voulez ouvrir le fichier en mode écriture et que vous voulez tronquer le fichier pour empêcher le fichier existe déjà, vous pouvez utiliser la syntaxe suivante:

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

De même, si vous voulez ouvrir un fichier pour la lecture et l'écriture, vous pouvez utiliser la syntaxe suivante:

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

Fermez le fichier

Lorsque le programme C ++ se termine, il sera éteint automatiquement actualiser tous les flux, libérer toute la mémoire allouée et fermez tous les fichiers ouverts. Mais les programmeurs doivent développer une bonne habitude, avant que le programme se termine près tous les fichiers ouverts.

Voici la fonction close () est la syntaxe standard, la fonction close () est un membre de fstream, ifstream et ofstream objets.

void close();

Écrire à déposer

Dans la ++ programmation C, nous utilisons l'opérateur d'insertion de flux (<<) pour écrire des informations dans un fichier, tout comme l'utilisation des informations de sortie à l'opérateur sur le même écran. La seule différence est qu'ici vous utilisezofstream ou objet fstreamau lieu de l' objetcoutisme.

Lire le dossier

Dans la ++ programmation C, nous utilisons l'opérateur d'extraction de flux (>>) pour lire des informations à partir d'un fichier, tout comme l'utilisation des informations d'entrée de l'opérateur à partir du clavier. La seule différence est qu'ici vous utilisezfstream ou objet ifstreamau lieu de l' objetcin.

Lire et écrire des exemples

Le programme suivant C ++ pour ouvrir un fichier en mode lecture-écriture. Après l'écriture sur le fichier afile.dat informations saisies par l'utilisateur, le programme lit les informations à partir du fichier et de sortie à l'écran:

#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;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les entrées et sorties suivantes:

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

Les exemples ci-dessus utilisent un objet fonction cin supplémentaire, comme getline () lit une ligne de l'extérieur, ignorer () fonction lire la déclaration avant de quitter les caractères supplémentaires sont ignorés.

Position du fichier pointeur

fonctionsIStream et membres de ostreamsont fournis pour repositionner l'emplacement du pointeur de fichier. Ceux - ci comprennent sur les fonctions de membre IStream deseekg ( "chercher get") et sur le seekpostream( "Seek mis").

seekp seekg et l'argument est habituellement un entier long. Le second paramètre peut être utilisé pour spécifier la direction de la recherche. Trouver direction peut êtreios :: beg (par défaut, le positionnement du début du flux), il peut être ios :: CUR (positionnementde la position actuelle du flux), il peut êtreios :: fin (dela fin du flux est commencé positionnement).

Position du fichier pointeur est une valeur entière qui spécifie le nombre d'octets à partir du début du fichier à l'emplacement du pointeur. Voici le ciblage "get" instance de pointeur de position du fichier:

// 定位到 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 );