std::filesystem::current_path în C++

Returnează sau schimbă directorul de lucru curent al programului.

Sintaxă
std::filesystem::path current_path();
void current_path(const std::filesystem::path& p);

Ce face std::filesystem::current_path

Fără argument, current_path() returnează calea absolută a directorului de lucru, adică directorul față de care se interpretează căile relative ("date.txt"). Cu argument, current_path(p) schimbă directorul de lucru.

Directorul de lucru este cel din care a fost pornit programul, nu neapărat cel în care se află executabilul. std::filesystem::absolute(p) transformă o cale relativă în una absolută, pornind de la directorul curent.

Parametri

Parametru Descriere
p Opțional: noul director de lucru.

Ce returnează

Varianta fără argument returnează un path absolut.

Exemple

Exemplul 1: Directorul de lucru

Calea depinde de calculator și de locul din care pornești programul.

#include <filesystem>
#include <print>

int main() {
    namespace fs = std::filesystem;
    std::println("Lucrez în: {}", fs::current_path().string());
    std::println("Absolut: {}", fs::absolute("date.txt").string());
}

Rezultat posibil (diferă la fiecare rulare)

Lucrez în: /Users/ana/proiecte/magazin
Absolut: /Users/ana/proiecte/magazin/date.txt

Exemplul 2: Schimbarea directorului de lucru

După schimbare, căile relative se interpretează față de noul director. Exemplul afișează doar numele directorului, care nu depinde de calculator.

#include <filesystem>
#include <fstream>
#include <print>

int main() {
    namespace fs = std::filesystem;
    fs::create_directory("export");
    const fs::path inainte = fs::current_path();

    fs::current_path("export");
    std::println("Acum sunt în: {}", fs::current_path().filename().string());
    std::ofstream("raport.txt") << "gata";   // se creează în export/

    fs::current_path(inainte);
    std::println("export/raport.txt există: {}", fs::exists("export/raport.txt"));
    fs::remove_all("export");
}

Rezultat

Acum sunt în: export
export/raport.txt există: true

Greșeli frecvente

  • Presupui că directorul curent este cel al executabilului. Dacă programul este pornit din alt loc (sau de un IDE), căile relative arată în altă parte.
  • Schimbi directorul de lucru într-un program cu mai multe fire. Directorul curent este comun întregului proces, deci afectează toate firele.

Comenzi înrudite