Ce face fs::metadata
fs::metadata(cale) returnează un Metadata cu informații despre fișier, fără să-l deschidă. File::metadata(&f) face același lucru pentru un fișier deja deschis. Pe Metadata găsești len() (dimensiunea în octeți), is_file(), is_dir(), permissions().readonly() și modified() (data ultimei modificări, ca SystemTime).
Dacă fișierul nu există, primești eroarea NotFound. fs::metadata urmează legăturile simbolice; pentru informații despre legătura însăși există fs::symlink_metadata.
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea fișierului sau a directorului. |
Ce returnează
io::Result<Metadata>.
Exemple
Exemplul 1: Dimensiune și tip
use std::fs;
fn main() -> std::io::Result<()> {
fs::write("articol.md", "# Rust\nUn limbaj sigur și rapid.\n")?;
fs::create_dir_all("imagini")?;
for cale in ["articol.md", "imagini"] {
let m = fs::metadata(cale)?;
println!("{cale}: fișier = {}, director = {}", m.is_file(), m.is_dir());
}
println!("articol.md are {} octeți", fs::metadata("articol.md")?.len());
println!("doar citire: {}", fs::metadata("articol.md")?.permissions().readonly());
println!("lipsa.txt: {:?}", fs::metadata("lipsa.txt").map_err(|e| e.kind()));
Ok(())
}
Rezultat
articol.md: fișier = true, director = false
imagini: fișier = false, director = true
articol.md are 34 octeți
doar citire: false
lipsa.txt: Err(NotFound)
Exemplul 2: File::metadata și data modificării
Dimensiunea crește după ce scriem în fișierul deschis. Data modificării este cea de acum, deci verificăm doar că s-a putut citi.
use std::fs::File;
use std::io::Write;
fn main() -> std::io::Result<()> {
let mut f = File::create("jurnal.txt")?;
println!("la creare: {} octeți", f.metadata()?.len());
writeln!(f, "pornire server")?;
println!("după scriere: {} octeți", f.metadata()?.len());
let modificat = f.metadata()?.modified();
println!("data modificării disponibilă: {}", modificat.is_ok());
Ok(())
}
Rezultat
la creare: 0 octeți
după scriere: 15 octeți
data modificării disponibilă: true
Greșeli frecvente
- Folosești
metadata().is_ok()ca să verifici dacă un fișier există și apoi îl deschizi: între cele două pași fișierul poate dispărea. Deschide-l direct și tratează eroarea. - Crezi că
len()pe un director dă dimensiunea conținutului: este dimensiunea intrării de director în sistemul de fișiere, nu suma fișierelor.
Comenzi înrudite
fs::read_dir: Listează intrările (fișiere și directoare) dintr-un director, ca iterator de DirEntry.Path::exists: Întreabă sistemul dacă la cale există ceva (exists), dacă este un fișier (is_file) sau un director (is_dir).SystemTime: Ora sistemului (ceasul din calendar); diferența față de UNIX_EPOCH dă timestamp-ul Unix în secunde.File: Un fișier deschis: File::open îl deschide pentru citire, File::create îl creează (sau golește) pentru scriere.