Entrées/sorties : Les flux en C++
Pour pouvoir sauvegarder des données après fermeture de vos programmes, vous devez écrire ces données dans des fichiers. Cette astuce vous montre comment faire.
Pour ouvrir un fichier, que ce soit en lecture ou en écriture, il faut déclarer une instance des objetsofstream et/ou ifstream. Pour cela, pensez à inclure "fstream".
Attention : le fichier utilisé pour les exemples s'appelle "donnees.txt". Rien ne vous empêche de l'appeler comme vous voulez. Cela ne change en rien le résultat.
Ouvrir un fichier en lecture
Pour ouvrir un fichier en lecture, l'objet nécessaire est "ifstream", puis il faut fermer ce flux avec
la fonction membre close().
Ouverture du fichier "donnees.txt" en lecture
#include <iostream> #include <fstream> using namespace std; int main() { ifstream fichier("donnees.txt"); fichier.close(); //fermeture du flux return 0; }
Ce code ne fait rien en apparence, mais en vérité, il ouvre le fichier "donnees.txt" en lecture.
On instancie un objet de type ifstream en lui donnant en paramètre le nom de notre fichier.
Implicitement, cela appelle le constructeur de la classe ifstream qui va ouvrir ce fichier.
Lecture du contenu de "donnees.txt"
#include <iostream> #include <fstream> using namespace std; int main() { ifstream fichier("donnees.txt"); char caractere; while(fichier.get(caractere)) cout << caractere; cout << endl << endl; fichier.close(); //fermeture du flux return 0; }
Ouvrir un fichier en écriture
Pour ouvrir un fichier en lecture, l'objet nécessaire est "ofstream", puis il faut fermer ce flux avec la fonction membre close().
Ouverture du fichier "donnees.txt" en écriture
#include <iostream> #include <fstream> using namespace std; int main() { ofstream fichier("donnees.txt"); fichier.close(); //fermeture du flux return 0; }
Ce code ne fait rien en apparence, mais en vérité, il ouvre le fichier "donnees.txt" en écriture.
Écrire dans "donnees.txt"
#include <iostream> #include <fstream> using namespace std; int main() { char bonjour[10] = "bonjour !" ofstream fichier("donnees.txt"); fichier << bonjour; //écriture de la chaine bonjour dans donnees.txt fichier.close(); //fermeture du flux return 0; }
Vous avez certainement déjà rencontré des codes du type:
cout << "chaine à afficher";
Et vous aurez remarqué son utilisation dans le code ci-dessus.
Rencontrer ainsi l'opérateur << peut paraître troublant puisque qu'il est normalement destiné à déplacer
des bits.
En fait cet opérateur est utilisé sur les objets de gestion de flux (ifstream, ofstream, etc..) pour écrire ou lire dans le flux. Celà est programmé par le biais d'une surcharge d'opérateur. Sans besoin de se perdre dans des détails hors sujets, il est utile de noter que surcharger un opérateur signifie "pour tel opérateur (+, -, <<, etc...) appliqué à tel type d'objet (ifstream, ofstream), je veux qu'il se passe tel truc".
Ici ifstream utilise >> pour la lecture depuis le flux, et ofstream utilise << pour l'écriture vers le flux. Ces opérateurs ont été choisis dans les bibliothèques standards car ils sont très visuels, et expriment bien le mouvement et sa direction.
Différents types d'ouverture de flux
Par défaut, ofstream crée automatiquement un fichier si celui précisé n'existe pas. Mais vous pouvez rajouter des paramètres à ce constructeur, pour en changer le comportement :
- Voici la liste des paramètres possibles :
- ios::app : Ouvre le fichier en ajout, à la fin, au lieu de supprimer son contenu au préalable.
- ios::ate : Permet de se placer en fin de fichier.
- ios::trunc : Comportement par défaut : le contenu est supprimé à l'ouverture.
- ios::nocreate : Provoque un échec d'ouverture si le fichier n'existe pas.
- ios::noreplace : Provoque un échec de l'ouverture si le fichier existe déjà.
A découvrir aussi
- [VBA] Cacher barre des tâches pour appli plein écran
- Créer un setup d'installation - Inno Setup Compiler
- VB.Net - Minuterie polyvalente
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 2 autres membres