C++-Dateien und -Streams
Bisher haben wir den iostream verwendet Standardbibliothek, die cin bereitstellt und cout Methoden zum Lesen von der Standardeingabe bzw. zum Schreiben in die Standardausgabe.
In diesem Tutorial lernen Sie, wie Sie aus einer Datei lesen und schreiben. Dies erfordert eine weitere Standard-C++-Bibliothek namens fstream , die drei neue Datentypen definiert −
Sr.No | Datentyp &Beschreibung |
---|---|
1 | offstream Dieser Datentyp stellt den Ausgabedateistrom dar und wird verwendet, um Dateien zu erstellen und Informationen in Dateien zu schreiben. |
2 | ifstream Dieser Datentyp stellt den Eingabedateistrom dar und wird verwendet, um Informationen aus Dateien zu lesen. |
3 | fstream Dieser Datentyp stellt den Dateistrom im Allgemeinen dar und hat die Fähigkeiten von sowohl ofstream als auch ifstream, was bedeutet, dass er Dateien erstellen, Informationen in Dateien schreiben und Informationen aus Dateien lesen kann. |
Um eine Dateiverarbeitung in C++ durchzuführen, müssen die Header-Dateien
Öffnen einer Datei
Eine Datei muss geöffnet werden, bevor Sie sie lesen oder darauf schreiben können. Entweder ofstream oder fstream Objekt kann verwendet werden, um eine Datei zum Schreiben zu öffnen. Und das ifstream-Objekt wird verwendet, um eine Datei nur zum Lesen zu öffnen.
Es folgt die Standard-Syntax für die open()-Funktion, die ein Mitglied von fstream-, ifstream- und ofstream-Objekten ist.
void open(const char *filename, ios::openmode mode);
Hier gibt das erste Argument den Namen und Ort der zu öffnenden Datei und das zweite Argument von open() an Member-Funktion definiert den Modus, in dem die Datei geöffnet werden soll.
Sr.No | Modus-Flag &Beschreibung |
---|---|
1 | ios::app Anfügemodus. Alle Ausgaben dieser Datei werden an das Ende angehängt. |
2 | ios::ate Öffnen Sie eine Datei für die Ausgabe und verschieben Sie die Lese-/Schreibsteuerung an das Ende der Datei. |
3 | ios::in Öffnen Sie eine Datei zum Lesen. |
4 | ios::out Öffnen Sie eine Datei zum Schreiben. |
5 | ios::trunc Wenn die Datei bereits existiert, wird ihr Inhalt vor dem Öffnen der Datei abgeschnitten. |
Sie können zwei oder mehr dieser Werte durch ODER kombinieren ing sie zusammen. Wenn Sie beispielsweise eine Datei im Schreibmodus öffnen und sie abschneiden möchten, falls sie bereits vorhanden ist, folgt die Syntax −
ofstream outfile; outfile.open("file.dat", ios::out | ios::trunc );
Auf ähnliche Weise können Sie eine Datei zum Lesen und Schreiben wie folgt öffnen:−
fstream afile; afile.open("file.dat", ios::out | ios::in );
Schließen einer Datei
Wenn ein C++-Programm beendet wird, leert es automatisch alle Streams, gibt den gesamten zugewiesenen Speicher frei und schließt alle geöffneten Dateien. Aber es ist immer eine gute Praxis, dass ein Programmierer alle geöffneten Dateien schließt, bevor das Programm beendet wird.
Es folgt die Standard-Syntax für die Funktion close(), die ein Mitglied von fstream-, ifstream- und ofstream-Objekten ist.
void close();
In eine Datei schreiben
Bei der C++-Programmierung schreiben Sie Informationen aus Ihrem Programm mithilfe des Stream-Einfügungsoperators (<<) in eine Datei, genauso wie Sie diesen Operator verwenden, um Informationen auf dem Bildschirm auszugeben. Der einzige Unterschied besteht darin, dass Sie einen ofstream verwenden oder fstream Objekt anstelle von cout Objekt.
Aus einer Datei lesen
Sie lesen Informationen aus einer Datei in Ihr Programm, indem Sie den Stream-Extraktionsoperator (>>) verwenden, so wie Sie diesen Operator verwenden, um Informationen über die Tastatur einzugeben. Der einzige Unterschied besteht darin, dass Sie einen ifstream verwenden oder fstream -Objekt anstelle von cin Objekt.
Beispiel zum Lesen und Schreiben
Es folgt das C++-Programm, das eine Datei im Lese- und Schreibmodus öffnet. Nachdem die vom Benutzer eingegebenen Informationen in eine Datei namens afile.dat geschrieben wurden, liest das Programm Informationen aus der Datei und gibt sie auf dem Bildschirm aus −
Live-Demo#include <fstream> #include <iostream> using namespace std; int main () { char data[100]; // open a file in write mode. ofstream outfile; outfile.open("afile.dat"); cout << "Writing to the file" << endl; cout << "Enter your name: "; cin.getline(data, 100); // write inputted data into the file. outfile << data << endl; cout << "Enter your age: "; cin >> data; cin.ignore(); // again write inputted data into the file. outfile << data << endl; // close the opened file. outfile.close(); // open a file in read mode. ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // write the data at the screen. cout << data << endl; // again read the data from the file and display it. infile >> data; cout << data << endl; // close the opened file. infile.close(); return 0; }
Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgende Beispieleingabe und -ausgabe −
$./a.out Writing to the file Enter your name: Zara Enter your age: 9 Reading from the file Zara 9
Obige Beispiele verwenden zusätzliche Funktionen des cin-Objekts, wie die Funktion getline(), um die Zeile von außen zu lesen, und die Funktion ignore(), um die zusätzlichen Zeichen zu ignorieren, die durch die vorherige Leseanweisung hinterlassen wurden.
Dateipositionszeiger
Beide istream und ostream Stellen Sie Memberfunktionen zum Neupositionieren des Dateipositionszeigers bereit. Diese Elementfunktionen sind seekg ("seek get") für istream und seekp ("seek put") für ostream.
Das Argument für seekg und seekp ist normalerweise eine lange Ganzzahl. Ein zweites Argument kann angegeben werden, um die Suchrichtung anzugeben. Die Suchrichtung kann ios::beg sein (Standardeinstellung) für die Positionierung relativ zum Anfang eines Streams, ios::cur für die Positionierung relativ zur aktuellen Position in einem Stream oder ios::end für die Positionierung relativ zum Ende eines Streams.
Der Dateipositionszeiger ist ein ganzzahliger Wert, der die Position in der Datei als eine Anzahl von Bytes von der Startposition der Datei angibt. Einige Beispiele für die Positionierung des "get"-Dateipositionszeigers sind −
// position to the nth byte of fileObject (assumes ios::beg) fileObject.seekg( n ); // position n bytes forward in fileObject fileObject.seekg( n, ios::cur ); // position n bytes back from end of fileObject fileObject.seekg( n, ios::end ); // position at end of fileObject fileObject.seekg( 0, ios::end );
C Sprache