Einleitung
Die Arbeit mit dem Dateisystem ist eine der Kernaufgaben in jeder anwendungsorientierten Programmierung. In C++ gibt es zwei Hauptansätze: den klassischen (mit der Bibliothek <fstream>) und den modernen (mit der Bibliothek <filesystem>, verfügbar ab dem Standard C++17). In diesem Artikel werden wir anhand praktischer Beispiele erläutern, wie man Dateien liest und schreibt, Verzeichnisse erstellt und löscht sowie die Existenz von Dateien überprüft.
Das Material ist sowohl für Anfänger, die gerade C++ lernen, als auch für erfahrene Entwickler nützlich, die ihr Wissen über moderne Sprachfunktionen auffrischen möchten.
1. Lesen und Schreiben von Textdateien mit fstream
Die Bibliothek <fstream> stellt Klassen für die Arbeit mit Dateien bereit: ifstream (Lesen), ofstream (Schreiben) und fstream (Lesen und Schreiben).
1.1. Daten in eine Datei schreiben
Zum Schreiben in eine Datei verwenden wir ein ofstream-Objekt. Wenn die Datei nicht existiert, wird sie erstellt. Wenn sie existiert, wird der Inhalt (standardmäßig) überschrieben.
#include <iostream>#include <fstream>#include <string>
int main() { std::ofstream outFile("example.txt"); if (!outFile.is_open()) { std::cerr << "Fehler beim Öffnen der Datei!" << std::endl; return 1; }
outFile << "Hallo, Welt!" << std::endl; outFile << "Dies ist die zweite Zeile." << std::endl; outFile.close(); std::cout << "Daten wurden geschrieben." << std::endl; return 0;}Beachten Sie: Wir überprüfen immer, ob das Öffnen der Datei erfolgreich war, und schließen sie nach der Verwendung.
1.2. Daten aus einer Datei lesen
Zum Lesen verwenden wir ifstream. Der einfachste Weg ist das zeilenweise Lesen mit std::getline.
#include <iostream>#include <fstream>#include <string>
int main() { std::ifstream inFile("example.txt"); if (!inFile.is_open()) { std::cerr << "Fehler beim Öffnen der Datei!" << std::endl; return 1; }
std::string line; while (std::getline(inFile, line)) { std::cout << line << std::endl; } inFile.close(); return 0;}Diese Methode ist praktisch, da sie das Dateiende automatisch behandelt und keine zusätzlichen Prüfungen erfordert.
1.3. Dateiöffnungsmodi
Sie können Flags kombinieren, um den Öffnungsmodus zu steuern. Um beispielsweise Daten an das Ende einer Datei anzuhängen (Anhänge-Modus), verwenden Sie das Flag std::ios::app:
std::ofstream outFile("example.txt", std::ios::app);outFile << "Zusätzliche Zeile." << std::endl;outFile.close();Weitere nützliche Flags: std::ios::binary (Binärmodus), std::ios::trunc (Datei beim Öffnen leeren).
2. Moderne Arbeit mit dem Dateisystem (C++17 und filesystem)
Die Bibliothek <filesystem> vereinfacht die Manipulation von Dateien und Ordnern erheblich. Alle Funktionen befinden sich im Namensraum std::filesystem.
2.1. Überprüfen der Existenz einer Datei oder eines Verzeichnisses
Die Funktion exists() gibt true zurück, wenn das Objekt existiert:
#include <iostream>#include <filesystem>
namespace fs = std::filesystem;
int main() { std::string path = "example.txt"; if (fs::exists(path)) { std::cout << "Datei existiert." << std::endl; } else { std::cout << "Datei nicht gefunden." << std::endl; } return 0;}2.2. Erstellen und Löschen von Verzeichnissen
Verwenden Sie create_directory() zum Erstellen eines Ordners. Zum Löschen verwenden Sie remove() oder remove_all() (rekursives Löschen).
Blogs
Buchempfehlungen
Lesen Sie auch
Go im Jahr 2025: Was gibt es Neues und warum ist es für Entwickler wichtig