Arbeiten mit dem Dateisystem in C++: praktische Beispiele

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

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