Explorando la estructura inmutable Path de Rust

Beginner

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

Introducción

En este laboratorio, exploraremos la estructura Path en Rust, que representa rutas de archivos en el sistema de archivos subyacente. Viene en dos variantes: posix::Path para sistemas UNIX-like y windows::Path para Windows. La Path se puede crear a partir de un OsStr y proporciona varios métodos para recuperar información del archivo o directorio al que apunta la ruta. Es importante destacar que una Path es inmutable, y su versión con propiedad se llama PathBuf, que se puede mutar in situ. La relación entre Path y PathBuf es similar a la entre str y String.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.

Path

La estructura Path representa rutas de archivos en el sistema de archivos subyacente. Hay dos variantes de Path: posix::Path, para sistemas UNIX-like, y windows::Path, para Windows. El preludio exporta la variante de Path adecuada para la plataforma.

Una Path se puede crear a partir de un OsStr, y proporciona varios métodos para obtener información del archivo/directorio al que apunta la ruta.

Una Path es inmutable. La versión con propiedad de Path es PathBuf. La relación entre Path y PathBuf es similar a la de str y String: un PathBuf se puede mutar in situ, y se puede desreferenciar a una Path.

Tenga en cuenta que una Path no se representa internamente como una cadena UTF-8, sino que se almacena como un OsString. Por lo tanto, convertir una Path en un &str no es gratis y puede fallar (se devuelve una Option). Sin embargo, una Path se puede convertir libremente en un OsString o &OsStr usando into_os_string y as_os_str, respectivamente.

use std::path::Path;

fn main() {
    // Crea una `Path` a partir de un `&'static str`
    let path = Path::new(".");

    // El método `display` devuelve una estructura `Display`able
    let _display = path.display();

    // `join` combina una ruta con un contenedor de bytes usando el separador
    // específico de la plataforma, y devuelve un `PathBuf`
    let mut new_path = path.join("a").join("b");

    // `push` extiende el `PathBuf` con una `&Path`
    new_path.push("c");
    new_path.push("myfile.tar.gz");

    // `set_file_name` actualiza el nombre de archivo del `PathBuf`
    new_path.set_file_name("package.tgz");

    // Convierte el `PathBuf` en una porción de cadena
    match new_path.to_str() {
        None => panic!("new path is not a valid UTF-8 sequence"),
        Some(s) => println!("new path is {}", s),
    }
}

Asegúrese de revisar otros métodos de Path (posix::Path o windows::Path) y la estructura Metadata.

Resumen

¡Felicitaciones! Has completado el laboratorio de Path. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.