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 удалено |
См. также
| стирает файл (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/remove