std::filesystem::rename în C++

Redenumește sau mută un fișier sau un director.

Sintaxă
void rename(const std::filesystem::path& vechi, const std::filesystem::path& nou);

Ce face std::filesystem::rename

rename(vechi, nou) schimbă numele sau locația unui fișier ori director. Dacă nou este în alt director (pe același disc), fișierul este mutat acolo.

Dacă nou este un fișier care există deja, este înlocuit. Între discuri diferite, mutarea poate eșua cu filesystem_error; atunci se folosește copy urmat de remove.

Parametri

Parametru Descriere
vechi Calea actuală.
nou Noua cale (nume nou și/sau alt director).

Ce returnează

Nimic. Erorile se semnalează prin filesystem_error.

Exemple

Exemplul 1: Redenumire și mutare în alt director

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

int main() {
    namespace fs = std::filesystem;
    std::ofstream("ciorna.txt") << "Text final";
    fs::create_directory("publicate");

    fs::rename("ciorna.txt", "articol.txt");
    std::println("articol.txt există: {}", fs::exists("articol.txt"));

    fs::rename("articol.txt", "publicate/articol.txt");
    std::println("mutat în publicate: {}", fs::exists("publicate/articol.txt"));
    std::println("mai e în directorul curent: {}", fs::exists("articol.txt"));

    fs::remove_all("publicate");
}

Rezultat

articol.txt există: true
mutat în publicate: true
mai e în directorul curent: false

Exemplul 2: Sursa nu există

#include <filesystem>
#include <print>
#include <system_error>

int main() {
    namespace fs = std::filesystem;
    std::error_code ec;
    fs::rename("nu-exista.txt", "nou.txt", ec);
    if (ec) {
        std::println("Nu am putut redenumi: {}", ec.message());
    }
}

Rezultat

Nu am putut redenumi: No such file or directory

Greșeli frecvente

  • Redenumești peste un fișier existent crezând că primești o eroare. Destinația este înlocuită fără avertisment; verifică întâi cu exists dacă nu vrei asta.

Comenzi înrudite