Ce face PathBuf
PathBuf este perechea deținută a lui Path, așa cum String este a lui str. Îl creezi gol cu PathBuf::new() sau dintr-un text cu PathBuf::from("..."), iar orice metodă a lui Path funcționează direct pe el.
push(x) adaugă o componentă la final, cu separatorul corect (și, ca join, înlocuiește totul dacă x este absolută). pop() elimină ultima componentă. set_extension("ext") înlocuiește extensia (cu "" o elimină); returnează false dacă nu există nume de fișier.
Parametri
| Parametru | Descriere |
|---|---|
path |
La push: componenta adăugată. |
extension |
La set_extension: noua extensie, fără punct. |
Ce returnează
new: un PathBuf gol. push: nimic. pop și set_extension: bool.
Exemple
Exemplul 1: Construirea și modificarea unei căi
use std::path::PathBuf;
fn main() {
let mut cale = PathBuf::new();
cale.push("export");
cale.push("2026");
cale.push("raport.txt");
println!("{}", cale.display());
cale.set_extension("csv");
println!("cu altă extensie: {}", cale.display());
cale.pop();
cale.push("sumar.pdf");
println!("după pop și push: {}", cale.display());
let mut fara = PathBuf::from("arhiva.tar.gz");
fara.set_extension("");
println!("fără extensie: {}", fara.display());
}
Rezultat
export/2026/raport.txt
cu altă extensie: export/2026/raport.csv
după pop și push: export/2026/sumar.pdf
fără extensie: arhiva.tar
Exemplul 2: Fișiere de ieșire cu aceeași bază
Pentru fiecare imagine construim calea miniaturii: alt director, același nume, extensia webp.
use std::path::{Path, PathBuf};
fn miniatura(original: &Path) -> PathBuf {
let mut cale = PathBuf::from("miniaturi");
if let Some(nume) = original.file_name() {
cale.push(nume);
}
cale.set_extension("webp");
cale
}
fn main() {
for f in ["poze/vara.jpg", "poze/iarna/munte.png", "logo.svg"] {
println!("{f} -> {}", miniatura(Path::new(f)).display());
}
}
Rezultat
poze/vara.jpg -> miniaturi/vara.webp
poze/iarna/munte.png -> miniaturi/munte.webp
logo.svg -> miniaturi/logo.webp
Greșeli frecvente
- Dai lui
set_extensionextensia cu punct (".csv"): rezultatul esteraport..csv. - Faci
push("/tmp")și te aștepți să adauge: o cale absolută înlocuiește tot conținutul.
Comenzi înrudite
Path: O cale din sistemul de fișiere, împrumutată (ca &str pentru texte); Path::new transformă un text în &Path.Path::join: Lipește o cale la alta cu separatorul corect al sistemului și returnează un PathBuf nou.Path::extension: extension() dă extensia fișierului (după ultimul punct), file_name() ultima parte a căii, fără directoare.env::current_dir: Returnează directorul de lucru curent al programului, față de care se calculează căile relative.