Fichiers et flux C++
Jusqu'à présent, nous avons utilisé le iostream bibliothèque standard, qui fournit cin et couter méthodes pour lire à partir de l'entrée standard et écrire sur la sortie standard respectivement.
Ce tutoriel vous apprendra comment lire et écrire à partir d'un fichier. Cela nécessite une autre bibliothèque C++ standard appelée fstream , qui définit trois nouveaux types de données −
Sr.No | Type de données et description |
---|---|
1 | |
2 | |
3 |
Pour effectuer le traitement de fichiers en C++, les fichiers d'en-tête
Ouvrir un fichier
Un fichier doit être ouvert avant de pouvoir le lire ou y écrire. Soit du flux ou fstream objet peut être utilisé pour ouvrir un fichier en écriture. Et l'objet ifstream est utilisé pour ouvrir un fichier à des fins de lecture uniquement.
Voici la syntaxe standard de la fonction open(), qui est membre des objets fstream, ifstream et ofstream.
void open(const char *filename, ios::openmode mode);
Ici, le premier argument spécifie le nom et l'emplacement du fichier à ouvrir et le second argument de open() La fonction membre définit le mode dans lequel le fichier doit être ouvert.
Sr.No | Indicateur de mode et description |
---|---|
1 | |
2 | |
3 | |
4 | |
5 |
Vous pouvez combiner deux ou plusieurs de ces valeurs par OU les réunissant. Par exemple, si vous souhaitez ouvrir un fichier en mode écriture et que vous souhaitez le tronquer au cas où il existe déjà, voici la syntaxe −
ofstream outfile; outfile.open("file.dat", ios::out | ios::trunc );
De la même manière, vous pouvez ouvrir un fichier à des fins de lecture et d'écriture comme suit −
fstream afile; afile.open("file.dat", ios::out | ios::in );
Fermer un fichier
Lorsqu'un programme C++ se termine, il vide automatiquement tous les flux, libère toute la mémoire allouée et ferme tous les fichiers ouverts. Mais c'est toujours une bonne pratique qu'un programmeur ferme tous les fichiers ouverts avant la fin du programme.
Voici la syntaxe standard de la fonction close(), qui est membre des objets fstream, ifstream et ofstream.
void close();
Écrire dans un fichier
Lors de la programmation C++, vous écrivez des informations dans un fichier à partir de votre programme en utilisant l'opérateur d'insertion de flux (<<) tout comme vous utilisez cet opérateur pour afficher des informations à l'écran. La seule différence est que vous utilisez un ofstream ou fstream objet au lieu du cout objet.
Lecture à partir d'un fichier
Vous lisez les informations d'un fichier dans votre programme en utilisant l'opérateur d'extraction de flux (>>) tout comme vous utilisez cet opérateur pour saisir des informations à partir du clavier. La seule différence est que vous utilisez un ifstream ou fstream objet au lieu du cin objet.
Exemple de lecture et d'écriture
Voici le programme C++ qui ouvre un fichier en mode lecture et écriture. Après avoir écrit les informations saisies par l'utilisateur dans un fichier nommé afile.dat, le programme lit les informations du fichier et les affiche à l'écran −
Démo en direct#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; }
Lorsque le code ci-dessus est compilé et exécuté, il produit l'exemple d'entrée et de sortie suivant -
$./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 des fonctions supplémentaires de l'objet cin, comme la fonction getline() pour lire la ligne de l'extérieur et la fonction ignore() pour ignorer les caractères supplémentaires laissés par l'instruction de lecture précédente.
Pointeurs de position de fichier
Les deux istream et ostream fournissent des fonctions membres pour repositionner le pointeur de position de fichier. Ces fonctions membres sont seekg ("seek get") pour istream et seekp ("seek put") pour ostream.
L'argument de seekg et seekp est normalement un entier long. Un deuxième argument peut être spécifié pour indiquer la direction de recherche. La direction de recherche peut être ios::beg (par défaut) pour le positionnement par rapport au début d'un flux, ios::cur pour le positionnement par rapport à la position actuelle dans un flux ou ios::end pour le positionnement par rapport à la fin d'un flux.
Le pointeur de position de fichier est une valeur entière qui spécifie l'emplacement dans le fichier sous la forme d'un nombre d'octets à partir de l'emplacement de départ du fichier. Quelques exemples de positionnement du pointeur de position de fichier "get" sont −
// 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 );
Langue C