Ausgabedateistream-Memberfunktionen
Ausgabedateistream-Memberfunktionen verfügen über drei Arten: die, die Manipulatoren entsprechen, die, die unformatierte Schreibvorgänge ausführen, und die, die andernfalls den Streamstatus ändern und keinen entsprechenden Manipulator oder Einfügungsoperator haben. Für die sequenzielle, formatierte Ausgabe können Sie nur Einfügungsoperatoren und Manipulatoren verwenden. Bei einer binäre Datenträgerausgabe verwenden Sie andere Memberfunktionen, mit oder ohne Einfügungsoperatoren.
Die open-Funktion für Ausgabestreams
Um einen Ausgabedateidatenstrom (ofstream
) zu verwenden, müssen Sie diesen Datenstrom einer bestimmten Datenträgerdatei im Konstruktor oder der open
Funktion zuordnen. Wenn Sie die open
Funktion verwenden, können Sie dasselbe Datenstromobjekt mit einer Reihe von Dateien wiederverwenden. In beiden Fällen sind die Argumente, die die Datei beschreiben identisch.
Wenn Sie die datei öffnen, die einem Ausgabedatenstrom zugeordnet ist, geben Sie im Allgemeinen ein open_mode
Flag an. Sie können diese Flags kombinieren, die als Enumerationszeichen in der ios
Klasse definiert sind, mit dem bitweisen OR ( |
) -Operator. Eine Liste der Enumeratoren finden Sie ios_base::openmode
unter
Drei allgemeine Situationen für die Ausgabestreams umfassen Modusoptionen:
Erstellen einer Datei. Wenn die Datei bereits vorhanden ist, wird die alte Version gelöscht.
ofstream ofile("FILENAME"); // Default is ios::out ofstream ofile("FILENAME", ios::out); // Equivalent to above
Anfügen von Datensätzen an eine vorhandene Datei oder Erstellen einer Datei, wenn sie nicht vorhanden ist.
ofstream ofile("FILENAME", ios::app);
Einzelnes Öffnen von zwei Dateien auf demselben Stream.
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.
Die put
-Funktion
Die put
Funktion schreibt ein Zeichen in den Ausgabedatenstrom. Die beiden folgenden Anweisungen sind standardmäßig identisch, aber die zweite ist von den Streamformatargumenten betroffen:
cout.put('A');
// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply
Die write
-Funktion
Die write
Funktion schreibt einen Speicherblock in einen Ausgabedateidatenstrom. Das Längenargument bestimmt die Anzahl geschriebener Bytes. Dieses Beispiel erstellt einen Ausgabestream für die Datei und schreibt den binären Wert der Date
-Struktur hinein:
// 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 );
}
Die write
Funktion beendet nicht, wenn sie ein NULL
Zeichen erreicht, sodass die vollständige Klassenstruktur geschrieben wird. Die Funktion akzeptiert zwei Argumente: ein char
-Zeiger und die Anzahl der zu schreibenden Zeichen. Beachten Sie die erforderliche Umwandlung vor char *
der Adresse des Strukturobjekts.
Die Funktionen seekp und tellp
Ein Ausgabestream für die Datei hält einen internen Zeiger, der auf die Position zeigt, in der die Daten als nächstes geschrieben werden sollen. Die seekp
-Memberfunktion legt diesen Zeiger fest und bietet somit Random_Access-Datenträgerdateiausgaben. Die tellp
-Memberfunktion gibt die gespeicherte Dateiposition zurück. Beispiele, in denen der Eingabedatenstrom entsprechet seekp
und verwendet wird, finden Sie unter "Theseekg
" und tellg
"Functions"tellp
.
Die close-Funktion für Ausgabestreams
Die close
Memberfunktion schließt die Datenträgerdatei, die einem Ausgabedateidatenstrom zugeordnet ist. Die Datei muss geschlossen werden, um alle Datenträgerausgaben abzuschließen. Bei Bedarf schließt der ofstream
Destruktor die Datei für Sie, aber Sie können die close
Funktion verwenden, wenn Sie eine andere Datei für dasselbe Streamobjekt öffnen müssen.
Der Ausgabedatenstrom-Destruktor schließt die Datei eines Datenstroms automatisch nur, wenn der Konstruktor oder die open
Memberfunktion die Datei geöffnet hat. Wenn Sie den Konstruktor als Dateideskriptor für eine bereits geöffnete Datei übergeben oder die attach
Memberfunktion verwenden, müssen Sie die Datei explizit schließen.
Fehlerverarbeitungsfunktionen
Verwenden Sie diese Memberfunktionen, um beim Schreiben in einen Stream auf Fehler zu testen:
Funktion | Rückgabewert |
---|---|
bad |
Gibt zurück true , wenn ein nicht behebbarer Fehler auftritt. |
fail |
Gibt zurück true , wenn ein nicht behebbarer Fehler oder eine "erwartete" Bedingung vorhanden ist, z. B. einen Konvertierungsfehler, oder wenn die Datei nicht gefunden wird. Die Verarbeitung kann häufig nach einem Aufruf clear mit einem Null-Argument fortgesetzt werden. |
good |
Gibt zurück true , wenn keine Fehlerbedingung (nicht behebbar oder anderweitig) vorhanden ist und das Flag für das Ende der Datei nicht festgelegt ist. |
eof |
Gibt die End-of-File-Bedingung zurück true . |
clear |
Legt den internen Fehlerzustand fest. Wenn mit den Standardargumenten aufgerufen, löscht er alle Fehlerbits. |
[rdstate ](basic-ios-class.md#rdstate |
Gibt den aktuellen Fehlerstatus zurück. |
Der !
Operator wird überladen, um dieselbe Funktion wie die fail
Funktion auszuführen. Daher ist der Ausdruck:
if(!cout)...
entspricht:
if(cout.fail())...
Der void*()
Operator ist überladen, um das Gegenteil des !
Operators zu sein; somit der Ausdruck:
if(cout)...
gleich:
if(!cout.fail())...
Der void*()
Operator entspricht nicht good
dem, weil er nicht auf das Ende der Datei testt.