env::current_dir în Rust

Returnează directorul de lucru curent al programului, față de care se calculează căile relative.

Sintaxă
pub fn current_dir() -> io::Result<PathBuf>
pub fn set_current_dir<P: AsRef<Path>>(path: P) -> io::Result<()>

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ă.