Arbeiten mit dem Dateisystem in C++: Vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit dem Dateisystem in C++: Von den Grundlagen bis zu fortgeschrittenen Techniken



Die Arbeit mit dem Dateisystem ist eine der grundlegenden Aufgaben bei der Entwicklung in C++. Ob es um das Speichern von Anwendungseinstellungen, die Verarbeitung von Logs oder die Erstellung komplexer Datenverwaltungssysteme geht – die Fähigkeit, Dateien und Verzeichnisse zu lesen, zu schreiben und zu manipulieren, ist für jeden C++-Entwickler unerlässlich. In diesem Artikel betrachten wir sowohl die klassischen Methoden der Dateiarbeit mit fstream als auch den modernen Ansatz mit der Bibliothek std::filesystem (C++17 und neuer).



Grundlagen der Dateiarbeit: Die fstream-Bibliothek



Die Bibliothek fstream (<fstream>) stellt drei Hauptklassen für die Arbeit mit Dateien bereit:



  • ifstream – zum Lesen aus einer Datei (input file stream);
  • ofstream – zum Schreiben in eine Datei (output file stream);
  • fstream – zum gleichzeitigen Lesen und Schreiben.


Daten aus einer Datei lesen



Betrachten wir ein einfaches Beispiel zum Öffnen und zeilenweisen Lesen einer Textdatei:



#include <iostream>#include <fstream>#include <string>

int main() { std::ifstream inputFile("data.txt"); if (!inputFile.is_open()) { std::cerr << "Fehler beim Öffnen der Datei!" << std::endl; return 1; }

std::string line; while (std::getline(inputFile, line)) { std::cout << line << std::endl; }

inputFile.close(); return 0;}


Es ist wichtig, den Erfolg des Dateiöffnens immer mit der Methode is_open() zu überprüfen. Die Datei wird automatisch geschlossen, wenn sie den Gültigkeitsbereich verlässt, aber der explizite Aufruf von close() gilt als gute Praxis.



Daten in eine Datei schreiben



Das Schreiben in eine Datei erfolgt analog zur Ausgabe auf der Konsole – mit dem Operator <<:



#include <fstream>

int main() { std::ofstream outputFile("output.txt"); if (!outputFile) { std::cerr << "Datei konnte nicht erstellt werden!" << std::endl; return 1; }

outputFile << "Zeile 1" << std::endl; outputFile << "Zeile 2" << std::endl; outputFile << 42 << std::endl; // Zahlen werden automatisch als Text geschrieben

outputFile.close(); return 0;}


Standardmäßig überschreibt ofstream die Datei. Um Daten am Ende hinzuzufügen, verwenden Sie das Flag std::ios::app:



std::ofstream outputFile("log.txt", std::ios::app);


Binärdateien und wahlfreier Zugriff



Für die Arbeit mit Binärdaten verwenden Sie das Flag std::ios::binary. Die Methoden read() und write() ermöglichen die Arbeit mit Speicherblöcken:



#include <fstream>

struct Record { int id; char name[50];};

int main() { // Struktur schreiben Record rec = {1, "Beispiel"}; std::ofstream binOut("data.bin", std::ios::binary); binOut.write(reinterpret_cast<char*>(&rec), sizeof(rec)); binOut.close();

// Struktur lesen Record recIn; std::ifstream binIn("data.bin", std::ios::binary); binIn.read(reinterpret_cast<char*>(&recIn), sizeof(recIn)); binIn.close();

return 0;}


Verwenden Sie für die Positionierung innerhalb der Datei seekg() (für die Eingabe) und seekp() (für die Ausgabe) mit den Parametern std::ios::beg, std::ios::cur oder std::ios::end.



Modernes C++: Die std::filesystem-Bibliothek



Ab C++17 wurde das Modul std::filesystem in die Standardbibliothek aufgenommen, das die Arbeit mit dem Dateisystem erheblich vereinfacht. Es bietet praktische Funktionen zur Manipulation von Pfaden, Dateien und Verzeich

Blogs

Buchempfehlungen