Arbeiten mit dem Dateisystem in C++: für Anfänger
Die Arbeit mit dem Dateisystem ist eine der Kernaufgaben jedes Programmierers. In C++ gibt es mehrere Möglichkeiten, mit Dateien und Verzeichnissen zu interagieren: von den klassischen Streams fstream bis zum modernen std::filesystem (C++17). In diesem Artikel werden wir die grundlegenden Operationen behandeln: Lesen und Schreiben von Dateien, Überprüfen ihrer Existenz, Erstellen und Löschen von Ordnern sowie Navigation durch das Dateisystem. Alle Codebeispiele sind in C++ geschrieben und für Anfänger geeignet.
1. Grundlagen der Dateiarbeit mit fstream
Die Klassen ifstream (Eingabe aus Datei), ofstream (Ausgabe in Datei) und fstream (Ein-/Ausgabe) sind die grundlegenden Werkzeuge für die Arbeit mit Text- und Binärdateien. Sie befinden sich in der Header-Datei <fstream>.
Lesen aus einer Datei
Um Daten aus einer Datei zu lesen, erstellen Sie ein ifstream-Objekt und öffnen Sie die Datei. Stellen Sie sicher, dass die Datei existiert, sonst befindet sich der Stream in einem Fehlerzustand.
#include <iostream>#include <fstream>#include <string>
int main() { std::ifstream file("example.txt"); if (!file.is_open()) { std::cerr << "Fehler beim Öffnen der Datei"; return 1; }
std::string line; while (std::getline(file, line)) { std::cout << line << std::endl; }
file.close(); return 0;}Schreiben in eine Datei
Verwenden Sie zum Schreiben ofstream. Wenn die Datei nicht existiert, wird sie erstellt. Wenn sie existiert, wird der Inhalt überschrieben (sofern nicht das Flag std::ios::app angegeben ist).
#include <fstream>
int main() { std::ofstream file("output.txt"); if (!file.is_open()) { std::cerr << "Datei konnte nicht erstellt werden"; return 1; }
file << "Hello, world!"; file << "C++ Dateisystem";
file.close(); return 0;}Anhängen von Daten an das Ende einer Datei
Verwenden Sie das Flag std::ios::app (append), um Daten an das Ende anzuhängen, ohne vorherige Daten zu löschen.
std::ofstream file("log.txt", std::ios::app);file << "Neuer Eintrag";file.close();2. Arbeiten mit Verzeichnissen und dem Dateisystem (C++17)
Ab C++17 enthält die Standardbibliothek den Header <filesystem>, der eine bequeme und plattformunabhängige Schnittstelle für die Arbeit mit dem Dateisystem bietet. Um ihn zu verwenden, fügen Sie das Compiler-Flag -std=c++17 (oder höher) hinzu und binden Sie <filesystem> ein.
Überprüfen der Existenz einer Datei oder eines Verzeichnisses
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { fs::path p = "example.txt"; if (fs::exists(p)) { std::cout << "Datei existiert"; std::cout << "Größe: " << fs::file_size(p) << " Bytes"; } else { std::cout << "Datei nicht gefunden"; } return 0;}Erstellen und Löschen von Verzeichnissen
#include <filesystem>namespace fs = std::filesystem;
int main() { // Ein einzelnes Verzeichnis erstellen if (fs::create_directory("my_folder")) { std::cout << "Ordner erstellt"; }
// Verschachtelte Verzeichnisse erstellen fs::create_directories("a/b/c");
// Leeres Verzeichnis löschen fs::remove("my_folder");
// Verzeichnis mit gesamten Inhalt löschen (Vorsicht!) // fs::remove_all("a");
return 0;}Durchlaufen des Verzeichnisinhalts
#include <iostream>#include <filesystem>namespace fs = std::filesystem;
int main() { std::string path = "."; for (const auto& entry : fs::directory_iterator(path)) { if