Namespaces
Variants

std::filesystem:: remove, std::filesystem:: remove_all

From ru.cppreference.net
Определено в заголовочном файле <filesystem>
bool remove ( const std:: filesystem :: path & p ) ;
(1) (начиная с C++17)
bool remove ( const std:: filesystem :: path & p, std:: error_code & ec ) noexcept ;
(2) (начиная с C++17)
(3) (начиная с C++17)
(4) (начиная с C++17)
1,2) Файл или пустой каталог, указанный путем p , удаляется как с помощью POSIX-функции remove . Символические ссылки не отслеживаются (удаляется сама символическая ссылка, а не её цель).
3,4) Удаляет содержимое p (если это директория) и содержимое всех её поддиректорий рекурсивно, затем удаляет сам p как если бы многократно применялся POSIX remove . Символические ссылки не отслеживаются (удаляется сама символьная ссылка, а не её цель).

Содержание

Параметры

p - путь для удаления
ec - выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке.

Возвращаемое значение

1,2) true если файл был удален, false если файл не существовал. Перегруженная версия с аргументом error_code& возвращает false при ошибках.
3,4) Возвращает количество файлов и каталогов, которые были удалены (может быть нулевым, если p изначально не существовал). Перегрузка, принимающая аргумент error_code& возвращает static_cast < std:: uintmax_t > ( - 1 ) при ошибке.

Исключения

Любая перегрузка, не помеченная noexcept , может выбрасывать std::bad_alloc при неудачном выделении памяти.

1,3) Выбрасывает std::filesystem::filesystem_error при ошибках базового API ОС, созданный с p в качестве первого аргумента пути и кодом ошибки ОС в качестве аргумента кода ошибки.
2,4) Устанавливает параметр std:: error_code & в код ошибки API операционной системы при сбое вызова OS API, и выполняет ec. clear ( ) если ошибок не происходит.

Примечания

В системах POSIX эта функция обычно вызывает unlink и rmdir по мере необходимости, тогда как в Windows DeleteFileW и RemoveDirectoryW .

Если p не существует, эта функция возвращает false и не сообщает об ошибке.

Пример

#include <cstdint>
#include <filesystem>
#include <fstream>
#include <iostream>
int main()
{
    namespace fs = std::filesystem;
    std::cout << std::boolalpha;
    fs::path tmp{std::filesystem::temp_directory_path()};
    const auto O_O{"O_O"};
    std::ofstream{tmp / O_O} << O_O; // создает файл содержащий O_O
    std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // успех
    std::cout << "remove(): " << fs::remove(tmp / O_O) << '\n'; // неудача
    std::filesystem::create_directories(tmp / "abcdef/example");
    const std::uintmax_t n{fs::remove_all(tmp / "abcdef")};
    std::cout << "remove_all(): " << n << " files or directories\n";
}

Возможный вывод:

remove(): true
remove(): false
remove_all(): 2 files or directories

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 3014 C++17 error_code перегрузка remove_all помечена как noexcept, но может выделять память noexcept удалён

Смотрите также

удаляет файл
(функция)