Arbeiten mit dem Dateisystem in Rust: praktische Beispiele und Tipps

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 Rust: in der Praxis



Rust ist eine moderne Systemsprache, die dem Entwickler die volle Kontrolle über den Speicher gibt und gleichzeitig Sicherheit garantiert. Die Arbeit mit dem Dateisystem ist eine der grundlegenden Aufgaben, die in fast jedem Projekt gelöst werden müssen. In diesem Artikel werden wir anhand praktischer Beispiele durchgehen, wie man Dateien liest und schreibt, Verzeichnisse verwaltet und Ordner durchsucht. Alle Beispiele sind in Rust geschrieben und einsatzbereit.



Wichtige Module und Strukturen



In Rust ist das Modul std::fs (Dateisystem) für die Arbeit mit dem Dateisystem zuständig, sowie std::path für die Arbeit mit Pfaden. Die wichtigsten Typen:



  • std::fs::File — repräsentiert eine geöffnete Datei.
  • std::fs::read_dir — ein Iterator über den Inhalt eines Verzeichnisses.
  • std::path::Path und std::path::PathBuf — für die Arbeit mit Pfaden.


Einbinden der Module:



use std::fs;use std::path::Path;


Eine Datei vollständig lesen



Der einfachste Weg, eine kleine Textdatei zu lesen, ist die Verwendung der Funktion fs::read_to_string. Sie gibt ein Result<String> zurück.



use std::fs;

fn main() { let content = fs::read_to_string("example.txt") .expect("Datei konnte nicht gelesen werden"); println!("Dateiinhalt:{}", content);}


Wenn die Datei nicht existiert oder keine Zugriffsrechte vorliegen, wird das Programm mit einer Panik beendet. Verwenden Sie in echten Projekten match oder den ?-Operator zur Fehlerbehandlung.



Fehlerbehandlung beim Lesen



use std::fs;

fn read_file(path: &str) -> Result<String, std::io::Error> { fs::read_to_string(path)}

fn main() { match read_file("config.txt") { Ok(data) => println!("{}", data), Err(e) => eprintln!("Fehler: {}", e), }}


Daten in eine Datei schreiben



Zum Schreiben wird fs::write (überschreibt die Datei) oder das Erstellen einer File mit den Optionen OpenOptions verwendet.



Einfaches Schreiben eines Strings



use std::fs;

fn main() { let data = "Hallo, Rust!"; fs::write("output.txt", data) .expect("Datei konnte nicht geschrieben werden"); println!("Datei erfolgreich geschrieben");}


Anhängen an das Dateiende



use std::fs::OpenOptions;use std::io::Write;

fn main() { let mut file = OpenOptions::new() .append(true) .create(true) .open("log.txt") .expect("Datei konnte nicht geöffnet werden");

writeln!(file, "{} - Logeintrag", chrono::Local::now()) .expect("Schreiben fehlgeschlagen");}


Beachten Sie: OpenOptions ermöglicht eine flexible Konfiguration des Modus – Erstellen, Überschreiben, Anhängen, Lesen.



Arbeiten mit Verzeichnissen



Das Erstellen, Löschen und Durchsuchen von Ordnern sind häufige Aufgaben. Betrachten wir sie.



Ein neues Verzeichnis erstellen



use std::fs;

fn main() { fs::create_dir("new_folder") .expect("Ordner konnte nicht erstellt werden"); // Verschachtelte Ordner erstellen (rekursiv) fs::create_dir_all("parent/child/grandchild") .expect("Verschachtelte Ordner konnten nicht erstellt werden");}


Ein Verzeichnis löschen



use std::fs;

fn main() { // Nur leeren Ordner löschen fs::remove_dir("empty_folder").ok(); // Rekursives Löschen mit gesamten Inhalt fs::remove_dir_all("temp_data") .expect("Ordner konnte nicht gelöscht werden");}


Seien Sie vorsichtig mit remove_dir_all – es löscht unwiderruflich den gesamten Inhalt.



Inhalt eines Verzeichnisses durchsuchen



Iteration über Dateien und Ordner innerhalb eines Verzeichnisses:



use std::fs;

fn main() { let entries = fs::read_dir(".") .expect("Verzeichnis konnte nicht gelesen werden");\

Blogs

Buchempfehlungen