Fonctions membres de flux de fichiers de sortie
les fonctions membres de flux de sortie ont trois types : ceux qui sont équivalents aux manipulateurs, celles qui exécutent des opérations non formatées d'écriture, et celles qui modifient ou l'état de flux de données et n'ont aucun manipulateur ou opérateur équivalent d'insertion.Pour séquentiel, sortie mise en forme, vous pouvez utiliser uniquement les opérateurs d'insertion et les manipulateurs.Pour la sortie binaire d'accès aléatoire du disque, vous utilisez d'autres fonctions membres, avec ou sans les opérateurs d'insertion.
La fonction ouverte pour les flux de sortie
Pour utiliser un flux de fichier de sortie (ofstream), vous devez associer ce flux de données avec un fichier sur disque spécifique dans le constructeur ou la fonction d' ouvrez .si vous utilisez la fonction d' ouvrez , 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 une balise d' open_mode .Vous pouvez combiner ces indicateurs, qui sont définies comme des énumérateurs dans la classe d' ios , avec le de bits OR ( | opérateur).Consultez l' ios_base : : openmode pour une liste des énumérateurs.
trois situations courantes de flux de sortie impliquent des options de mode :
créer un fichier.Si le fichier existe déjà, l'ancienne version est supprimée.
ostream ofile( "FILENAME" ); // Default is ios::out ofstream ofile( "FILENAME", ios::out ); // Equivalent to above
Ajout des enregistrements à un fichier existant ou à créer un s'il n'existe pas.
ofstream ofile( "FILENAME", ios::app );
Ouvrant deux fichiers, un par un, dans 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 mise
La fonction de mettez é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 du format du flux de données :
cout.put( 'A' ); // Exactly one character written
cout << 'A'; // Format arguments 'width' and 'fill' apply
la fonction d'écriture
La fonction d' écriture écrit un bloc de mémoire à un flux de fichier de sortie.l'argument de longueur spécifie le nombre d'octets écrits.Cet exemple crée un flux de fichier de sortie et est écrit la valeur binaire de la structure d' 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 fonction d' écriture n'arrête pas lorsqu'elle atteint un caractère Null, donc la structure de classe complète est écrite.la fonction prend deux arguments : un pointeur d' char et un nombre de caractères à écrire.notez le cast requis à char* avant l'adresse de l'objet de structure.
les fonctions de seekp et de tellp
Un flux de fichier de sortie conserve un pointeur interne qui indique la position où les données doivent être écrites suivant.La fonction membre d' seekp définit ce pointeur et fournit donc la sortie d'accès aléatoire de fichier sur disque.La fonction membre d' tellp retourne la position de fichier.Pour obtenir des exemples qui utilisent des équivalents de flux d'entrée à seekp et à tellp, consultez les fonctions de seekg et de tellg.
La fonction close pour les flux de sortie
La fonction membre de fermez ferme le fichier sur disque associé à un flux de fichier de sortie.Le fichier doit être fermé pour compléter toutes les sorties de disque.Si nécessaire, le destructeur d' ofstream ferme le fichier pour vous, mais vous pouvez utiliser la fonction de fermez 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 de données uniquement si le constructeur ou la fonction membre d' ouvrez ouvrait le fichier.Si vous passez le constructeur un descripteur de fichier des fichiers déjà-ouvert ou utilisez la fonction membre d' attachement , vous devez fermer le fichier de manière explicite.
Erreur de traitement des fonctions
Utilisez les fonctions membres pour déterminer des erreurs lors de l'écriture à un flux :
Fonction |
Valeur de retour |
---|---|
Retourne true s'il existe une erreur irrécupérable. |
|
Retourne true s'il existe une erreur irrécupérable ou un état « attendu », tel qu'une erreur de conversion, ou si le fichier est introuvable.Le traitement peut souvent continuer après un appel à espace libre avec un argument zéro. |
|
Retourne true s'il n'y a aucune condition d'erreur irrécupérable (ou autre) et la balise de fin de fichier n'est pas définie. |
|
Retourne true sur la condition fin de fichier. |
|
définit l'état d'erreur interne.Si appelé avec les arguments par défaut, elle efface tous les bits d'erreurs. |
|
retourne l'état actuel d'erreur. |
L'opérateur de ! est surchargé pour effectuer la même fonction que la fonction d' échec .L'expression :
if( !cout)...
équivaut à :
if( cout.fail() )...
L'opérateur de void* () est surchargé pour être l'inverse de l'opérateur de ! ; l'expression :
if( cout)...
est égal à :
if( !cout.fail() )...
L'opérateur de void* () n'est pas équivalent à bon car il ne détermine pas la fin du fichier.