Entrées/sorties : Les flux en C++

Décembre 2016


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 objets ofstream 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 voir également :

Ce document intitulé «  Entrées/sorties : Les flux en C++  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.