Das unveränderliche Path-Strukt in Rust erkunden

Beginner

This tutorial is from open-source community. Access the source code

Einführung

In diesem Lab werden wir die Path-Struktur in Rust untersuchen, die Dateipfade im zugrunde liegenden Dateisystem repräsentiert. Sie kommt in zwei Varianten: posix::Path für UNIX-ähnliche Systeme und windows::Path für Windows. Ein Path kann aus einem OsStr erstellt werden und bietet verschiedene Methoden, um Informationen aus der Datei oder dem Verzeichnis zu erhalten, auf das der Pfad zeigt. Es ist wichtig zu beachten, dass ein Path unveränderlich ist, und seine eigene Version heißt PathBuf, die in-place verändert werden kann. Die Beziehung zwischen Path und PathBuf ist ähnlich der zwischen str und String.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.

Pfad

Die Path-Struktur repräsentiert Dateipfade im zugrunde liegenden Dateisystem. Es gibt zwei Varianten von Path: posix::Path für UNIX-ähnliche Systeme und windows::Path für Windows. Der Präambel exportiert die passende plattformspezifische Path-Variante.

Ein Path kann aus einem OsStr erstellt werden und bietet mehrere Methoden, um Informationen aus der Datei/des Verzeichnisses zu erhalten, auf das der Pfad zeigt.

Ein Path ist unveränderlich. Die eigene Version von Path ist PathBuf. Die Beziehung zwischen Path und PathBuf ist ähnlich der von str und String: Ein PathBuf kann in-place verändert werden und kann auf einen Path dereferenziert werden.

Beachten Sie, dass ein Path intern nicht als UTF-8-Zeichenfolge dargestellt wird, sondern als OsString gespeichert ist. Daher ist die Umwandlung eines Paths in einen &str nicht kostenlos und kann fehlschlagen (es wird eine Option zurückgegeben). Ein Path kann jedoch mit into_os_string bzw. as_os_str frei in einen OsString oder &OsStr umgewandelt werden.

use std::path::Path;

fn main() {
    // Erstellen Sie einen `Path` aus einem `&'static str`
    let path = Path::new(".");

    // Die `display`-Methode gibt eine `Display`-fähige Struktur zurück
    let _display = path.display();

    // `join` vereinigt einen Pfad mit einem Byte-Container unter Verwendung des
    // Betriebssystem-spezifischen Separators und gibt ein `PathBuf` zurück
    let mut new_path = path.join("a").join("b");

    // `push` erweitert das `PathBuf` um einen `&Path`
    new_path.push("c");
    new_path.push("myfile.tar.gz");

    // `set_file_name` aktualisiert den Dateinamen des `PathBuf`
    new_path.set_file_name("package.tgz");

    // Konvertieren Sie das `PathBuf` in einen String-Slice
    match new_path.to_str() {
        None => panic!("new path is not a valid UTF-8 sequence"),
        Some(s) => println!("new path is {}", s),
    }
}

Vergewissern Sie sich, andere Path-Methoden (posix::Path oder windows::Path) und die Metadata-Struktur zu überprüfen.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Pfad-Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.