std::filesystem::path în C++

Reprezintă calea unui fișier sau director și permite construirea și desfacerea ei pe componente.

Sintaxă
#include <filesystem>
namespace fs = std::filesystem;
fs::path p = "folder/fisier.txt";
fs::path p2 = p.parent_path() / "alt.txt";

Ce face std::filesystem::path

std::filesystem::path ține o cale (relativă sau absolută) și știe să o desfacă: filename() (raport.pdf), stem() (raport), extension() (.pdf), parent_path() (directorul). Operatorul / unește componente cu separatorul corect pentru sistem (/ sau \ pe Windows).

Crearea unui path nu atinge discul: este doar text. Funcțiile precum exists, file_size sau remove verifică sau modifică efectiv fișierele.

Pentru afișare folosește p.string(). Cu std::cout << p calea apare între ghilimele, iar std::println("{}", p) funcționează doar din C++26.

Ce returnează

Un obiect cale. Metodele returnează tot path-uri.

Exemple

Exemplul 1: Componentele unei căi

#include <filesystem>
#include <print>

int main() {
    namespace fs = std::filesystem;
    fs::path p = "documente/facturi/2025/factura-martie.pdf";

    std::println("filename:    {}", p.filename().string());
    std::println("stem:        {}", p.stem().string());
    std::println("extension:   {}", p.extension().string());
    std::println("parent_path: {}", p.parent_path().string());
    std::println("relativă:    {}", p.is_relative());
}

Rezultat

filename:    factura-martie.pdf
stem:        factura-martie
extension:   .pdf
parent_path: documente/facturi/2025
relativă:    true

Exemplul 2: Construire cu / și schimbarea extensiei

#include <filesystem>
#include <iostream>
#include <print>

int main() {
    namespace fs = std::filesystem;
    fs::path baza = "poze";
    fs::path poza = baza / "vacanta" / "mare.jpg";
    std::println("{}", poza.string());

    fs::path miniatura = poza;
    miniatura.replace_extension(".webp");
    std::println("{}", miniatura.string());

    std::cout << poza << '\n';   // cu cout apare între ghilimele
}

Rezultat

poze/vacanta/mare.jpg
poze/vacanta/mare.webp
"poze/vacanta/mare.jpg"

Greșeli frecvente

  • Lipești căi cu + între șiruri (dir + "/" + nume). Poți obține separatoare duble sau greșite; folosește operatorul / al lui path.
  • Te miri că std::cout << p afișează ghilimele. Este intenționat (pentru căi cu spații); folosește p.string().

Comenzi înrudite