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
std::filesystem::path: Reprezintă calea unui fișier sau director și permite construirea și desfacerea ei pe componente.std::filesystem::exists: Verifică dacă un fișier sau director există pe disc.std::filesystem::create_directory: Creează un director; create_directories creează și toate directoarele părinte care lipsesc.