Ce face env::current_dir
env::current_dir() dă calea absolută a directorului de lucru, ca PathBuf. Toate căile relative ("note.txt", "date/iunie.csv") sunt rezolvate față de el. Este directorul din care ai pornit programul în terminal, nu neapărat directorul în care se află executabilul.
env::set_current_dir(cale) schimbă directorul de lucru pentru tot procesul. Calea executabilului se află cu env::current_exe().
Ce returnează
io::Result<PathBuf>.
Exemple
Exemplul 1: Căile relative pornesc din directorul curent
Exemplul rulează într-un director temporar, cu nume diferit la fiecare rulare, așa că afișăm doar verificări.
use std::env;
use std::fs;
fn main() -> std::io::Result<()> {
let dir = env::current_dir()?;
println!("cale absolută: {}", dir.is_absolute());
fs::write("note.txt", "Ana 10")?;
let completa = dir.join("note.txt");
println!("director curent + note.txt există: {}", completa.exists());
println!("același conținut: {}", fs::read_to_string(&completa)? == fs::read_to_string("note.txt")?);
Ok(())
}
Rezultat
cale absolută: true
director curent + note.txt există: true
același conținut: true
Exemplul 2: Afișarea și schimbarea directorului
Calea afișată depinde de locul din care pornești programul.
use std::env;
fn main() -> std::io::Result<()> {
println!("acum: {}", env::current_dir()?.display());
env::set_current_dir("src")?;
println!("după schimbare: {}", env::current_dir()?.display());
Ok(())
}
Rezultat (depinde de directorul din care rulezi)
acum: /home/ana/proiecte/salut
după schimbare: /home/ana/proiecte/salut/src
Greșeli frecvente
- Presupui că directorul curent este cel al executabilului: dacă pornești programul din alt director, căile relative nu mai găsesc fișierele. Pentru fișiere livrate lângă program, pornește de la
env::current_exe(). - Folosești
set_current_dirîntr-un program cu mai multe fire: schimbarea afectează toate firele.
Comenzi înrudite
Path::join: Lipește o cale la alta cu separatorul corect al sistemului și returnează un PathBuf nou.PathBuf: Calea deținută și modificabilă (ca String pentru texte): push adaugă componente, set_extension schimbă extensia.env::var: Citește valoarea unei variabile de mediu (HOME, PATH, setări proprii); dă Err dacă nu există.