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 conrustc 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.