Ce face fs::create_dir_all
fs::create_dir_all("date/2026/octombrie") creează pe rând date, date/2026 și date/2026/octombrie, dacă nu există. Dacă tot drumul există deja, funcția reușește fără să facă nimic, deci o poți apela fără verificări.
Varianta fs::create_dir creează un singur director și dă eroare (AlreadyExists) dacă există deja sau NotFound dacă părintele lipsește.
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea directorului de creat. |
Ce returnează
io::Result<()>.
Exemple
Exemplul 1: Structură de directoare pentru rapoarte
use std::fs;
use std::path::Path;
fn main() -> std::io::Result<()> {
fs::create_dir_all("rapoarte/2026/octombrie")?;
fs::write("rapoarte/2026/octombrie/vanzari.csv", "zi,total\n1,1200\n")?;
println!("director creat: {}", Path::new("rapoarte/2026/octombrie").is_dir());
println!("a doua oară: {:?}", fs::create_dir_all("rapoarte/2026/octombrie"));
print!("{}", fs::read_to_string("rapoarte/2026/octombrie/vanzari.csv")?);
Ok(())
}
Rezultat
director creat: true
a doua oară: Ok(())
zi,total
1,1200
Exemplul 2: Diferența față de create_dir
use std::fs;
fn main() {
println!("create_dir a/b: {:?}", fs::create_dir("a/b").map_err(|e| e.kind()));
println!("create_dir a: {:?}", fs::create_dir("a").map_err(|e| e.kind()));
println!("din nou a: {:?}", fs::create_dir("a").map_err(|e| e.kind()));
println!("create_dir_all: {:?}", fs::create_dir_all("a/b/c").map_err(|e| e.kind()));
}
Rezultat
create_dir a/b: Err(NotFound)
create_dir a: Ok(())
din nou a: Err(AlreadyExists)
create_dir_all: Ok(())
Greșeli frecvente
- Folosești
create_dirpentru o cale cu mai multe niveluri noi: eroareaNotFound. Foloseștecreate_dir_all. - Verifici întâi cu
exists()și apoi creezi: între cele două pași alt program poate crea directorul.create_dir_allse descurcă singur cu directoarele existente.
Comenzi înrudite
fs::remove_file: remove_file șterge un fișier; remove_dir_all șterge un director cu tot conținutul lui. Ștergerea este definitivă.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).fs::write: Scrie tot conținutul dat într-un fișier, creându-l dacă nu există și înlocuindu-l dacă există.