Introduction
La gestion des fichiers est une compétence essentielle en programmation. En C++, elle repose sur la bibliothèque standard fstream, qui fournit trois classes principales :
std::ifstream
: pour la lecture des fichiers.std::ofstream
: pour l’écriture dans les fichiers.std::fstream
: pour la lecture et l’écriture combinées.
Cet article introduit les bases de la gestion des fichiers en C++ avec des exemples pratiques pour ouvrir, lire, écrire et manipuler des fichiers.
1. Les bases de la gestion des fichiers
En C++, vous devez inclure la bibliothèque <fstream>
pour travailler avec des fichiers. Voici les étapes générales :
- Créer un objet de fichier (
std::ifstream
,std::ofstream
oustd::fstream
). - Ouvrir le fichier avec une méthode comme
.open()
ou en passant directement le nom du fichier au constructeur. - Vérifier si le fichier est correctement ouvert à l’aide de
.is_open()
. - Lire ou écrire dans le fichier.
- Fermer le fichier avec
.close()
.
Exemple : Écriture dans un fichier
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream fichier("exemple.txt"); // Crée et ouvre le fichier
if (fichier.is_open()) {
fichier << "Bonjour, ceci est un fichier texte.\n";
fichier << "L'écriture dans les fichiers est simple en C++.\n";
fichier.close(); // Ferme le fichier
cout << "Écriture réussie dans exemple.txt" << endl;
} else {
cout << "Erreur : Impossible d'ouvrir le fichier." << endl;
}
return 0;
}
2. Lecture depuis un fichier
Pour lire un fichier, utilisez std::ifstream
. Voici un exemple pour lire ligne par ligne :
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream fichier("exemple.txt"); // Ouvre le fichier en lecture
string ligne;
if (fichier.is_open()) {
while (getline(fichier, ligne)) { // Lit une ligne à la fois
cout << ligne << endl;
}
fichier.close(); // Ferme le fichier
} else {
cout << "Erreur : Impossible de lire le fichier." << endl;
}
return 0;
}
3. Lecture et écriture combinées
Avec std::fstream
, vous pouvez ouvrir un fichier en lecture et écriture. Cela est utile pour modifier des fichiers existants.
Exemple : Lecture et écriture
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
fstream fichier("exemple.txt", ios::in | ios::out); // Ouvre en lecture et écriture
if (fichier.is_open()) {
string ligne;
while (getline(fichier, ligne)) { // Lit chaque ligne
cout << "Ligne lue : " << ligne << endl;
}
fichier.seekp(0, ios::end); // Place le curseur en fin de fichier
fichier << "Ajout d'une nouvelle ligne.\n"; // Écrit une nouvelle ligne
fichier.close(); // Ferme le fichier
} else {
cout << "Erreur : Impossible d'ouvrir le fichier." << endl;
}
return 0;
}
4. Vérifications et gestion des erreurs
Il est important de vérifier si les opérations sur les fichiers réussissent ou échouent. La bibliothèque fstream
fournit des méthodes comme :
.is_open()
: pour vérifier si le fichier est ouvert..fail()
: pour détecter les erreurs d’entrée/sortie.
Exemple : Gestion des erreurs
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fichier("fichier_inexistant.txt");
if (fichier.fail()) {
cerr << "Erreur : Le fichier n'existe pas ou ne peut être ouvert." << endl;
} else {
cout << "Fichier ouvert avec succès." << endl;
}
return 0;
}
5. Exercice pratique
Énoncé
Créez un programme qui :
- Lit un fichier contenant une liste de noms et de notes (ex. :
data.txt
). - Affiche les noms et les notes ligne par ligne.
- Ajoute un nouveau nom et une nouvelle note à la fin du fichier.
- Testez votre programme avec un fichier d'exemple.
Conclusion
La gestion des fichiers en C++ est une compétence fondamentale pour manipuler et persister les données. En utilisant les classes std::ifstream
, std::ofstream
et std::fstream
, il est possible de lire, écrire et modifier des fichiers de manière efficace et sécurisée.
Pour aller plus loin, découvrez comment manipuler des fichiers CSV et JSON en C++ dans notre article : Lecture et écriture de fichiers CSV et JSON en C++.
À propos de PointerLab
PointerLab est une ESN spécialisée dans le développement de logiciels C++ et experte sur le framework Qt.
Le nom PointerLab reflète notre maîtrise des concepts complexes en C++ et notre volonté d'innovation. Nous défendons des valeurs d’excellence technique, de transparence et de collaboration horizontale.
- Vous avez un projet ? Contactez-nous pour en discuter.
- Rejoignez notre communauté : CPP France sur Discord.