std::filesystem::remove în C++

Șterge un fișier sau un director gol; remove_all șterge un director cu tot conținutul lui.

Sintaxă
bool remove(const std::filesystem::path& p);
std::uintmax_t remove_all(const std::filesystem::path& p);

Ce face std::filesystem::remove

remove(p) șterge fișierul sau directorul gol p și returnează true. Dacă nu există nimic la acea cale, returnează false. Pe un director care nu este gol aruncă filesystem_error.

remove_all(p) șterge recursiv tot ce se află sub p și returnează numărul de elemente șterse. Ștergerea este definitivă (nu trece prin coșul de gunoi), așa că verifică bine calea.

Parametri

Parametru Descriere
p Calea de șters.

Ce returnează

remove: bool. remove_all: numărul de fișiere și directoare șterse.

Exemple

Exemplul 1: Ștergerea unui fișier

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

int main() {
    namespace fs = std::filesystem;
    std::ofstream("temporar.txt") << "date";

    std::println("șters: {}", fs::remove("temporar.txt"));
    std::println("șters din nou: {}", fs::remove("temporar.txt"));
}

Rezultat

șters: true
șters din nou: false

Exemplul 2: remove_all pe un director cu conținut

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

int main() {
    namespace fs = std::filesystem;
    fs::create_directories("cache/imagini");
    std::ofstream("cache/a.tmp") << "1";
    std::ofstream("cache/imagini/b.tmp") << "2";

    try {
        fs::remove("cache");   // nu este gol
    } catch (const fs::filesystem_error&) {
        std::println("remove nu poate șterge un director cu conținut");
    }

    std::println("elemente șterse: {}", fs::remove_all("cache"));
    std::println("cache există: {}", fs::exists("cache"));
}

Rezultat

remove nu poate șterge un director cu conținut
elemente șterse: 4
cache există: false

Greșeli frecvente

  • Apelezi remove_all cu o cale construită din date neverificate (de exemplu un șir gol sau "/"). Poți șterge mult mai mult decât voiai; verifică întotdeauna calea înainte.

Comenzi înrudite