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

Dernière mise à jour le 2 novembre 2009 à 13:33 par aquarelle
Publié par HACKER 712

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.

1. 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().

1.1 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.

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

2. 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().

2.1 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.

2.2 É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.

3. 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à.
Meilleures réponses pour « Entrées/sorties : Les flux en C++ » dans :
Flux d'Entrées/Sorties standard Voir Entrées/sorties Quand vous programmez, vous avez souvent besoin d’échanger des informations avec l’utilisateur, de consulter ou d’enregistrer des données. La gestion des entrées/sorties est donc particulièrement importante. En programmation...
Port série et port parallèle Voir Introduction aux ports d'entrée-sortie Les ports d'entrée-sortie sont des éléments matériels de l'ordinateur, permettant au système de communiquer avec des éléments extérieurs, c'est-à-dire d'échanger des données, d'où l'appellation d'interface...
Câbles et connecteurs VoirConnecteurs Les connecteurs informatiques, généralement appelés « connecteurs d'entrée-sortie » (notés E/S ou en anglais I/O pour Input/Output), sont des interfaces permettant de relier des équipements à l'aide de câbles. Ils se composent...
Périphérique VoirNotion de périphérique On appelle « périphérique » un matériel électronique pouvant être raccordé à un ordinateur par l'intermédiaire de l'une de ses interfaces d'entrée-sortie (port série, port parallèle, bus USB, bus firewire, interface SCSI,...
Carte son VoirIntroduction à la carte son La carte son (en anglais audio card ou sound card) est l'élément de l'ordinateur permettant de gérer les entrées-sorties sonores de l'ordinateur. Il s'agit généralement d'un contrôleur pouvant s'insérer dans un...
Collection CommentÇaMarche.net