std::filesystem::exists în C++

Verifică dacă un fișier sau director există pe disc.

Sintaxă
bool exists(const std::filesystem::path& p);
bool exists(const std::filesystem::path& p, std::error_code& ec) noexcept;

Ce face std::filesystem::exists

std::filesystem::exists(p) returnează true dacă la calea p există ceva (fișier, director, legătură validă). Pentru a ști ce anume este, folosește is_regular_file(p) și is_directory(p).

Varianta cu std::error_code nu aruncă excepții dacă verificarea însăși eșuează (de exemplu, lipsesc permisiunile).

Parametri

Parametru Descriere
p Calea verificată.
ec Opțional: primește eroarea în loc să se arunce o excepție.

Ce returnează

true dacă există, altfel false.

Exemple

Exemplul 1: Fișier, director sau nimic

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

int main() {
    namespace fs = std::filesystem;
    std::ofstream("note.txt") << "10 9 8\n";
    fs::create_directory("arhiva");

    for (const char* nume : {"note.txt", "arhiva", "lipsa.txt"}) {
        fs::path p = nume;
        std::println("{:10} există: {:5} fișier: {:5} director: {}",
                     nume, fs::exists(p), fs::is_regular_file(p), fs::is_directory(p));
    }

    fs::remove("note.txt");
    fs::remove("arhiva");
}

Rezultat

note.txt   există: true  fișier: true  director: false
arhiva     există: true  fișier: false director: true
lipsa.txt  există: false fișier: false director: false

Exemplul 2: Creează fișierul doar dacă nu există

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

int main() {
    namespace fs = std::filesystem;
    const fs::path config = "config.ini";

    for (int i = 0; i < 2; ++i) {
        if (!fs::exists(config)) {
            std::ofstream(config) << "limba=ro\n";
            std::println("Am creat {}", config.string());
        } else {
            std::println("{} există deja", config.string());
        }
    }
    fs::remove(config);
}

Rezultat

Am creat config.ini
config.ini există deja

Greșeli frecvente

  • Verifici cu exists și abia apoi deschizi fișierul, crezând că astfel ești protejat. Între cele două momente fișierul poate fi șters de alt program; verifică oricum rezultatul deschiderii.

Comenzi înrudite