Ce face Path::parent
parent() taie ultima componentă: părintele lui a/b/c.txt este a/b. Pentru o cale cu o singură componentă relativă (c.txt), părintele este calea goală "", adică directorul curent. Pentru rădăcină (/) sau pentru calea goală, rezultatul este None.
Operația este doar pe text: nu verifică discul și nu rezolvă ... ancestors() dă calea și toți părinții ei, pe rând, până la capăt.
Ce returnează
Option<&Path>.
Exemple
Exemplul 1: Părinți și strămoși
use std::path::Path;
fn main() {
for cale in ["/home/ana/poze/vara.jpg", "note.txt", "/", ""] {
println!("{cale:?} -> {:?}", Path::new(cale).parent());
}
println!("strămoși:");
for a in Path::new("proiect/src/bin/main.rs").ancestors() {
println!(" {}", a.display());
}
}
Rezultat
"/home/ana/poze/vara.jpg" -> Some("/home/ana/poze")
"note.txt" -> Some("")
"/" -> None
"" -> None
strămoși:
proiect/src/bin/main.rs
proiect/src/bin
proiect/src
proiect
Exemplul 2: Creează directorul părinte înainte de scriere
use std::fs;
use std::path::Path;
fn scrie_cu_directoare(cale: &Path, text: &str) -> std::io::Result<()> {
if let Some(dir) = cale.parent() {
fs::create_dir_all(dir)?;
}
fs::write(cale, text)
}
fn main() -> std::io::Result<()> {
let cale = Path::new("export/2026/clienti.csv");
scrie_cu_directoare(cale, "nume,oras\nAna,Iași\n")?;
println!("scris în {}: {}", cale.parent().unwrap().display(), cale.exists());
Ok(())
}
Rezultat
scris în export/2026: true
Greșeli frecvente
- Presupui că
parent()pentrunote.txtesteNone: esteSome("").fs::create_dir_all("")reușește, deci codul de mai sus merge oricum. - Folosești
parent()pedir/..și te aștepți la părintele real: rezultatul estedir, pentru că operația lucrează doar pe text. Pentru calea reală foloseștefs::canonicalize.
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.fs::create_dir_all: Creează un director împreună cu toți părinții lui care lipsesc; nu dă eroare dacă directorul există deja.