C++ Datei-I/O: Lesen & Schreiben mit fstream
Bislang: iostream mit cin/cout für Standard-I/O. Nun: Datei-Lesen/Schreiben mit fstream – definiert drei Datentypen:
| Nr. | Datentyp & Beschreibung |
|---|---|
| 1 | ofstream – Output File Stream: Dateien erstellen & schreiben |
| 2 | ifstream – Input File Stream: Dateien lesen |
| 3 | fstream – Allgemeiner File Stream: beide Fähigkeiten (erstellen, schreiben, lesen) |
Header: <iostream> und <fstream> einbinden.
Datei öffnen
Vor Lesen/Schreiben öffnen. ofstream/fstream für Schreiben, ifstream für Lesen.
Syntax open() (Member von fstream/ifstream/ofstream):
void open(const char* filename, ios::openmode mode);
filename: Name/Pfad. mode: Öffnungsmodus.
| Nr. | Modus-Flag & Beschreibung |
|---|---|
| 1 | ios::app – Append: Ausgabe ans Dateiende |
| 2 | ios::ate – Open für Output, Position ans Ende |
| 3 | ios::in – Zum Lesen öffnen |
| 4 | ios::out – Zum Schreiben öffnen |
| 5 | ios::trunc – Existierende Datei leeren vor Öffnen |
Flags per | (OR) kombinierbar. Beispiel Schreiben + Truncieren:
ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc);
Lesen & Schreiben:
fstream afile;
afile.open("file.dat", ios::out | ios::in);
Datei schließen
Programmende: automatisches Flush/Close. Gute Praxis: explizit close() vor Beendigung.
void close();
In Datei schreiben
Stream-Insertion-Operator << wie bei cout, aber mit ofstream/fstream-Objekt.
Aus Datei lesen
Stream-Extraction-Operator >> wie bei cin, aber mit ifstream/fstream-Objekt.
Komplettbeispiel: Schreiben & Lesen
#include <fstream>
#include <iostream>
using namespace std;
int main() {
char data[100];
ofstream outfile;
outfile.open("afile.dat");
cout << "Writing to the file" << endl;
cout << "Enter your name: ";
cin.getline(data, 100);
outfile << data << endl;
cout << "Enter your age: ";
cin >> data;
cin.ignore();
outfile << data << endl;
outfile.close();
ifstream infile;
infile.open("afile.dat");
cout << "Reading from the file" << endl;
infile >> data;
cout << data << endl;
infile >> data;
cout << data << endl;
infile.close();
return 0;
}
Beispiel-I/O:
$ ./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9
Zusatz: cin.getline() (Zeile lesen), cin.ignore() (Restzeichen verwerfen).
Datei-Positionspointer
istream/ostream bieten Repositionierung:
seekg(„seek get“) füristreamseekp(„seek put“) fürostream
Argument: long Integer. Optionaler 2. Parameter: Seek-Richtung:
ios::beg(Default) – relativ zum Anfangios::cur– relativ zur aktuellen Positionios::end– relativ zum Ende
Position = Byte-Offset vom Dateianfang. Beispiele:
fileObject.seekg(n); // n-tes Byte (ios::beg)
fileObject.seekg(n, ios::cur); // n Bytes vorwärts
fileObject.seekg(n, ios::end); // n Bytes vom Ende
fileObject.seekg(0, ios::end); // ans Ende
C Sprache
- C++-Variablen, Literale und Konstanten meistern: Ein umfassender Leitfaden
- C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
- C++ Friend-Funktionen und Friend-Klassen: Zugriffskontrolle meistern
- C-Dateiverwaltung: I/O mit fopen, fprintf, fread & fseek meistern
- Verzeichnis- und Dateioperationen in Python meistern
- C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
- C-Header-Dateien verstehen: Typen, Verwendung und Best Practices
- C++ Datum & Zeit: Umfassender Leitfaden
- C++ Overloading: Funktionen & Operatoren erklärt
- Feile (Schruppfeile) erklärt: Das unverzichtbare Werkzeug für Holz- und Metallbearbeitung