Partager via


Fonctions membres de flux de fichiers de sortie

Les fonctions membres de flux de sortie ont trois types : celles qui sont équivalentes aux manipulateurs, celles qui effectuent des opérations d'écriture non formatées et celles qui modifient autrement l'état du flux et n'ont aucun manipulateur ou opérateur d'insertion équivalent. Pour une sortie séquentielle mise en forme, vous ne pouvez utiliser que des opérateurs et manipulateurs d'insertion. Pour une sortie binaire sur disque à accès aléatoire, utilisez d'autres fonctions membres, avec ou sans opérateurs d'insertion.

Fonction open pour les flux de sortie

Pour utiliser un flux de fichiers de sortie (ofstream), vous devez associer ce flux à un fichier de disque spécifique dans le constructeur ou la open fonction. Si vous utilisez la open fonction, vous pouvez réutiliser le même objet de flux avec une série de fichiers. Dans les deux cas, les arguments décrivant le fichier sont identiques.

Lorsque vous ouvrez le fichier associé à un flux de sortie, vous spécifiez généralement un open_mode indicateur. Vous pouvez combiner ces indicateurs, qui sont définis en tant qu’énumérateurs dans la classe, avec l’opérateur OR ( | ) au niveau du ios bit. Consultez ios_base::openmode la liste des énumérateurs.

Trois situations de flux de sortie courantes impliquent des options de mode :

  • Création d'un fichier. Si le fichier existe déjà, l'ancienne version est supprimée.

    ofstream ofile("FILENAME");
    // Default is ios::out
    
    ofstream ofile("FILENAME", ios::out);
    // Equivalent to above
    
  • Ajout d’enregistrements à un fichier existant ou création d’un fichier s’il n’existe pas.

    ofstream ofile("FILENAME", ios::app);
    
  • Ouverture de deux fichiers, un par un, sur le même flux.

    ofstream ofile();
    ofile.open("FILE1", ios::in);
    // Do some output
    ofile.close();    // FILE1 closed
    ofile.open("FILE2", ios::in);
    // Do some more output
    ofile.close();    // FILE2 closed
    // When ofile goes out of scope it is destroyed.
    

La fonction put

La put fonction écrit un caractère dans le flux de sortie. Les deux instructions suivantes sont identiques par défaut, mais la deuxième est affectée par les arguments de format du flux :

cout.put('A');

// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply

La fonction write

La write fonction écrit un bloc de mémoire dans un flux de fichiers de sortie. L’argument de longueur spécifie le nombre d’octets écrits. Cet exemple crée un flux de fichier de sortie et y écrit la valeur binaire de la structure Date :

// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
   int mo, da, yr;
};

int main( )
{
   Date dt = { 6, 10, 92 };
   ofstream tfile( "date.dat" , ios::binary );
   tfile.write( (char *) &dt, sizeof dt );
}

La write fonction ne s’arrête pas lorsqu’elle atteint un NULL caractère, de sorte que la structure de classe complète est écrite. La fonction accepte deux arguments : un pointeur char et un nombre de caractères à écrire. Notez le cast char * requis avant l’adresse de l’objet structure.

Fonctions seekp et tellp

Un flux de fichier de sortie conserve un pointeur interne qui pointe vers l'emplacement où les données doivent être écrites par la suite. La fonction membre seekp définit ce pointeur et fournit une sortie de fichier sur disque à accès aléatoire. La fonction membre tellp retourne l'emplacement du fichier. Pour obtenir des exemples qui utilisent les équivalents du flux d’entrée et seekp tellp, consultez The seekg and tellg Functions.

Fonction close pour les flux de sortie

La close fonction membre ferme le fichier disque associé à un flux de fichiers de sortie. Le fichier doit être fermé pour effectuer la sortie sur disque. Si nécessaire, le ofstream destructeur ferme le fichier pour vous, mais vous pouvez utiliser la close fonction si vous devez ouvrir un autre fichier pour le même objet de flux.

Le destructeur de flux de sortie ferme automatiquement le fichier d’un flux uniquement si le constructeur ou la open fonction membre a ouvert le fichier. Si vous passez le constructeur d’un descripteur de fichier pour un fichier déjà ouvert ou si vous utilisez la attach fonction membre, vous devez fermer le fichier explicitement.

Fonctions de traitement des erreurs

Utilisez les fonctions membres ci-après pour tester les erreurs lors de l'écriture dans un flux :

Fonction Valeur retournée
bad Retourne true s’il existe une erreur irrécupérable.
fail Retourne true s’il existe une erreur irrécupérable ou une condition « attendue », telle qu’une erreur de conversion, ou si le fichier est introuvable. Le traitement peut souvent reprendre après un appel à un clear argument zéro.
good Retourne true s’il n’existe aucune condition d’erreur (irrécupérable ou autre) et que l’indicateur de fin de fichier n’est pas défini.
eof Retourne true la condition de fin de fichier.
clear Définit l'état d'erreur interne. Si la fonction est appelée avec les arguments par défaut, elle efface tous les bits d’erreur.
[rdstate](basic-ios-class.md#rdstate Retourne l'état d'erreur actuel.

L’opérateur ! est surchargé pour effectuer la même fonction que la fail fonction. Ainsi, l'expression :

if(!cout)...

équivaut à :

if(cout.fail())...

L’opérateur void*() est surchargé pour être l’opposé de l’opérateur ! ; par conséquent, l’expression :

if(cout)...

est égale à :

if(!cout.fail())...

L’opérateur void*() n’est pas équivalent car good il ne teste pas la fin du fichier.

Voir aussi

Flux de sortie