Explorer la structure Path immuable de Rust

RustRustBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer la structure Path en Rust, qui représente les chemins de fichiers dans le système de fichiers sous-jacent. Elle existe en deux variantes : posix::Path pour les systèmes UNIX et windows::Path pour Windows. Le Path peut être créé à partir d'un OsStr et fournit diverses méthodes pour récupérer des informations sur le fichier ou le répertoire auquel le chemin pointe. Il est important de noter qu'un Path est immuable, et sa version propriétaire est appelée PathBuf, qui peut être modifiée in situ. La relation entre Path et PathBuf est similaire à celle entre str et String.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/ErrorHandlingandDebuggingGroup(["Error Handling and Debugging"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/ErrorHandlingandDebuggingGroup -.-> rust/panic_usage("panic! Usage") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/mutable_variables -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/string_type -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/function_syntax -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/expressions_statements -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/method_syntax -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/panic_usage -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} rust/operator_overloading -.-> lab-99269{{"Explorer la structure Path immuable de Rust"}} end

Path

La structure Path représente les chemins de fichiers dans le système de fichiers sous-jacent. Il existe deux variantes de Path : posix::Path pour les systèmes UNIX et windows::Path pour Windows. Le préambule exporte la variante Path appropriée spécifique à la plateforme.

Un Path peut être créé à partir d'un OsStr et fournit plusieurs méthodes pour obtenir des informations sur le fichier/répertoire auquel le chemin pointe.

Un Path est immuable. La version propriétaire de Path est PathBuf. La relation entre Path et PathBuf est similaire à celle de str et String : un PathBuf peut être modifié in situ et peut être déréférencé en un Path.

Notez qu'un Path n'est pas représenté en interne comme une chaîne UTF-8, mais est stocké comme un OsString. Par conséquent, convertir un Path en un &str n'est pas gratuit et peut échouer (une Option est renvoyée). Cependant, un Path peut être converti librement en un OsString ou &OsStr en utilisant respectivement into_os_string et as_os_str.

use std::path::Path;

fn main() {
    // Crée un `Path` à partir d'un `&'static str`
    let path = Path::new(".");

    // La méthode `display` renvoie une structure `Display`able
    let _display = path.display();

    // `join` fusionne un chemin avec un conteneur d'octets en utilisant le séparateur
    // spécifique à l'OS, et renvoie un `PathBuf`
    let mut new_path = path.join("a").join("b");

    // `push` étend le `PathBuf` avec un `&Path`
    new_path.push("c");
    new_path.push("myfile.tar.gz");

    // `set_file_name` met à jour le nom de fichier du `PathBuf`
    new_path.set_file_name("package.tgz");

    // Convertit le `PathBuf` en une tranche de chaîne
    match new_path.to_str() {
        None => panic!("new path is not a valid UTF-8 sequence"),
        Some(s) => println!("new path is {}", s),
    }
}

Assurez-vous de consulter les autres méthodes de Path (posix::Path ou windows::Path) et la structure Metadata.

Résumé

Félicitations! Vous avez terminé le laboratoire sur le Path. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.