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.