Una sola llamada, fs::metadata, devuelve todo lo que el sistema sabe de un archivo: tamaño, tipo, permisos y fechas. Es el equivalente de lo que muestran las propiedades del explorador.
También te puede interesar
Consultar los metadatos
use std::fs;
fn main() -> std::io::Result<()> {
let info = fs::metadata("original.txt")?;
println!("tamaño : {} bytes", info.len());
println!("¿es un archivo? : {}", info.is_file());
println!("¿es una carpeta?: {}", info.is_dir());
println!("¿solo lectura? : {}", info.permissions().readonly());
let hace = info.modified()?.elapsed().unwrap_or_default();
println!("modificado hace : {} segundos", hace.as_secs());
Ok(())
}
salidatamaño : 19 bytes ¿es un archivo? : true ¿es una carpeta?: false ¿solo lectura? : false modificado hace : 18 segundos
La última línea cambia en cada ejecución, claro; las otras cuatro dependen solo del archivo. Y si la ruta no existe, metadata devuelve un error en lugar de valores vacíos, que es por lo que lleva el ?.
Las fechas no son
DateTime. modified() devuelve un SystemTime, que es un instante sin calendario: sirve para restar y comparar, no para saber el día de la semana. Para convertirlo a una fecha legible hace falta chrono, que acepta un SystemTime directamente. Es la misma separación que hace Rust entre medir intervalos y manejar calendarios.Lo que se puede consultar
| Qué | Cómo |
|---|---|
| Tamaño en bytes | info.len() |
| Archivo, carpeta o enlace | is_file(), is_dir(), is_symlink() |
| Última modificación | info.modified()? |
| Último acceso y creación | accessed()?, created()? |
| Solo lectura | info.permissions().readonly() |
| Permisos de Unix en octal | info.permissions().mode() |
| Sin seguir enlaces simbólicos | fs::symlink_metadata(ruta) |
No todo está disponible en todas partes.
created() falla en algunos sistemas de archivos de Linux que sencillamente no guardan esa fecha, y devuelve un error en vez de inventársela. El modo en octal requiere además importar std::os::unix::fs::PermissionsExt y no compila en Windows. Si el programa tiene que funcionar en los dos sistemas, conviene ceñirse a tamaño, tipo y fecha de modificación, que sí están en todos.El código de esta página se compiló y ejecutó con rustc 1.96.1 antes de publicarla; las salidas están copiadas de la ejecución real. Documentación oficial: el módulo std::fs.