Spec-Zone.ru › C++

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

Определено в заголовке <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)
std::uintmax_t remove_all( const std::filesystem::path& p );
(3) (с C++17)
std::uintmax_t remove_all( const std::filesystem::path& p, std::error_code& ec );
(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 при ошибках в системных вызовах ОС, созданный с p в качестве первого аргумента пути и кодом ошибки ОС как кодом ошибки.
2,4) Устанавливает параметр std::error_code& в код ошибки API ОС, если вызов API ОС завершился ошибкой, и выполняет ec.clear() если ошибок не произошло.

Примечания

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

Пример

#include <cstdint>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
 
int main()
{
    fs::path tmp{std::filesystem::temp_directory_path()};
    std::filesystem::create_directories(tmp / "abcdef/example");
    std::uintmax_t n{fs::remove_all(tmp / "abcdef")};
    std::cout << "Deleted " << n << " files or directories\n";
}

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

Deleted 2 files or directories

Отчёты об ошибках

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

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

См. также

remove
стирает файл
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/remove

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API