C++ Dateien und Streams
Bisher haben wiriostreamdie Standardbibliothek verwendet, diecinundcout bereitstelltDiese Methoden werden jeweils zum Lesen von Streams aus der Standardeingabe und zum Schreiben von Streams in die Standardausgabe verwendet.
Dieses Tutorial erklärt, wie man Streams aus einer Datei liest und Streams in eine Datei schreibt. Dies erfordert eine weitere Standardbibliothek in C++fstream, die drei neue Datentypen definiert:
| Datentypen | Beschreibung |
|---|---|
| ofstream | Dieser Datentyp repräsentiert einen Ausgabedateistream und wird verwendet, um Dateien zu erstellen und Informationen in Dateien zu schreiben. |
| ifstream | Dieser Datentyp repräsentiert einen Eingabedateistream und wird verwendet, um Informationen aus Dateien zu lesen. |
| fstream | Dieser Datentyp repräsentiert im Allgemeinen einen Dateistream und besitzt sowohl ofstream- als auch ifstream-Fähigkeiten, was bedeutet, dass er Dateien erstellen, Informationen in Dateien schreiben und Informationen aus Dateien lesen kann. |
Um Dateiverarbeitung in C++ durchzuführen, müssen Sie die Header-Dateien <iostream> und <fstream> in Ihre C++-Quelldatei einbinden.
Eine Datei öffnen
Bevor Informationen aus einer Datei gelesen oder Informationen in eine Datei geschrieben werden, muss die Datei zuerst geöffnet werden.ofstreamundfstreamDiese Objekte können verwendet werden, um Dateien für Schreibvorgänge zu öffnen. Wenn Sie eine Datei nur für Lesevorgänge öffnen müssen, verwenden Sieifstream-Objekt.
Nachfolgend finden Sie die Standardsyntax für die Funktion open(), die ein Member der Objekte fstream, ifstream und ofstream ist.
void open(const char *filename, ios::openmode mode);
Hierbei gibt der erste Parameter der Memberfunktionopen()den Namen und Speicherort der zu öffnenden Datei an, und der zweite Parameter definiert den Modus, in dem die Datei geöffnet wird.
| Modus-Flags | Beschreibung |
|---|---|
| ios::app | Append-Modus. Alle Schreibvorgänge werden an das Ende der Datei angehängt. |
| ios::ate | Positioniert nach dem Öffnen an das Ende der Datei. |
| ios::in | Öffnet die Datei zum Lesen. |
| ios::out | Öffnet die Datei zum Schreiben. |
| ios::trunc | Wenn die Datei bereits existiert, wird ihr Inhalt gekürzt, bevor die Datei geöffnet wird, das heißt, die Dateilänge wird auf 0 gesetzt. |
Sie können zwei oder mehr der oben genannten Modi kombinieren. Wenn Sie beispielsweise eine Datei im Schreibmodus öffnen und die Datei kürzen möchten, falls sie bereits vorhanden ist, können Sie die folgende Syntax verwenden:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );
Ebenso, wenn Sie eine Datei zum Lesen und Schreiben öffnen möchten, können Sie die folgende Syntax verwenden:
ifstream afile;
afile.open("file.dat", ios::out | ios::in );
Eine Datei schließen
Wenn ein C++-Programm beendet wird, leert es automatisch alle Streams, gibt den gesamten zugewiesenen Speicher frei und schließt alle geöffneten Dateien. Programmierer sollten jedoch die gute Angewohnheit entwickeln, alle geöffneten Dateien zu schließen, bevor das Programm beendet wird.
Nachfolgend sehen Sie die Standardsyntax für die Funktion close(), die ein Mitglied der Objekte fstream, ifstream und ofstream ist.
void close();
In eine Datei schreiben
In der C++-Programmierung verwenden wir den Stream-Einfügeoperator (<<), um Informationen in eine Datei zu schreiben, genau wie wir diesen Operator verwenden, um Informationen auf dem Bildschirm auszugeben. Der einzige Unterschied ist, dass Sie hierofstreamoderfstreamObjekt verwenden, stattcoutObjekt.
Aus einer Datei lesen
In der C++-Programmierung verwenden wir den Stream-Extraktionsoperator (>>), um Informationen aus einer Datei zu lesen, genau wie wir diesen Operator verwenden, um Informationen von der Tastatur einzugeben. Der einzige Unterschied ist, dass Sie hierifstreamoderfstreamObjekt, stattcinObjekt.
Lese- und Schreibbeispiel
Das folgende C++-Programm öffnet eine Datei im Lese-/Schreibmodus. Nachdem die vom Benutzer eingegebenen Informationen in die Datei afile.dat geschrieben wurden, liest das Programm die Informationen aus der Datei und gibt sie auf dem Bildschirm aus:
Beispiel
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgende Eingabe und Ausgabe:
$./a.out Writing to the file Enter your name: Zara Enter your age: 9 Reading from the file Zara 9
Das obige Beispiel verwendet zusätzliche Funktionen des cin-Objekts, wie die Funktion getline() zum Lesen einer Zeile aus einer externen Eingabe und die Funktion ignore() zum Ignorieren zusätzlicher Zeichen, die von vorherigen Leseanweisungen übrig geblieben sind.
Dateipositionszeiger
istreamundostreambieten beide Mitgliedsfunktionen zum Neupositionieren des Dateipositionszeigers. Zu diesen Mitgliedsfunktionen gehören für istreamseekg("seek get") und für ostreamseekp("seek put")。
Die Parameter von seekg und seekp sind normalerweise ein long integer. Der zweite Parameter kann verwendet werden, um die Suchrichtung anzugeben. Die Suchrichtung kannios::begsein (standardmäßig Positionierung vom Anfang des Streams aus), oder sie kannios::cur sein(Positionierung von der aktuellen Position im Stream aus), oder sie kannios::endsein (die Positionierung beginnt am Ende des Streams).
Der Dateipositionszeiger ist ein ganzzahliger Wert, der die Anzahl der Bytes vom Anfang der Datei bis zur Position des Zeigers angibt. Das Folgende ist ein Beispiel für die Positionierung des "get"-Dateipositionszeigers: