Freigeben über


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.

Siehe auch

Output Streams (Ausgabestreams)