std::filesystem::rename
Defined in header <filesystem> |
||
|---|---|---|
void rename( const std::filesystem::path& old_p,
const std::filesystem::path& new_p );
|
(1) | (since C++17) |
void rename( const std::filesystem::path& old_p,
const std::filesystem::path& new_p,
std::error_code& ec ) noexcept;
|
(2) | (since C++17) |
Перемещает или переименовывает файл-систему, идентифицируемый по old_p, в new_p, как если бы это делалось с помощью POSIX rename:
- Если
old_p— это файл, который не является каталогом, тоnew_pдолжен быть одним из следующих: - тот же файл, что и
old_p, или жёсткая ссылка на него: в этом случае ничего не делается. - существующий файл, который не является каталогом:
new_pсначала удаляется, затем, без возможности для других процессов наблюдать заnew_pкак удалённым, путьnew_pсвязывается с файлом, аold_pотсоединяется от файла. Права записи требуются для каталога, содержащегоold_p, и каталога, содержащегоnew_p. - несуществующий файл в существующем каталоге: Путь
new_pсвязывается с файлом, аold_pотсоединяется от файла. Права записи требуются для каталога, содержащегоold_p, и каталога, содержащегоnew_p. - Если
old_p— это каталог, тоnew_pдолжен быть одним из следующих: - тот же каталог, что и
old_p, или жёсткая ссылка на него: в этом случае ничего не делается. - существующий каталог:
new_pудаляется, если он пустой на системах POSIX, но это может быть ошибкой на других системах. Если это не ошибка, тоnew_pсначала удаляется, затем, без возможности для других процессов наблюдать заnew_pкак удалённым, путьnew_pсвязывается с каталогом, аold_pотсоединяется от каталога. Права записи требуются для каталога, содержащегоold_p, и каталога, содержащегоnew_p. - несуществующий каталог, не заканчивающийся символом разделителя каталога, и у которого родительский каталог существует: путь
new_pсвязывается с каталогом, аold_pотсоединяется от каталога. Права записи требуются для каталога, содержащегоold_p, и каталога, содержащегоnew_p. - Символические ссылки не отслеживаются: если
old_p— это символическая ссылка, то переименовывается сама ссылка, а не её целевой объект. Еслиnew_p— это существующая символическая ссылка, то удаляется сама ссылка, а не её целевой объект.
Переименование завершается неудачей, если
-
new_pзаканчивается символом точка или двойной точкой. -
new_pзадаёт несуществующий каталог, заканчивающийся символом разделителя каталога. -
old_p— это каталог, являющийся предкомnew_p.
Параметры
| old_p | - | путь для перемещения или переименования |
| new_p | - | целевой путь для операции перемещения/переименования |
| ec | - | параметр для отчёта об ошибках в перегрузке без исключений |
Возвращаемое значение
(нет)
Исключения
Любая перегрузка, не помеченная как noexcept, может вызвать std::bad_alloc, если выделение памяти не удаётся.
1) Вызывает
std::filesystem::filesystem_error при ошибках в базовых API ОС, созданный с old_p в качестве первого аргумента пути, new_p в качестве второго аргумента пути, и кодом ошибки ОС в качестве аргумента ошибки.
2) Устанавливает параметр
std::error_code& в код ошибки API ОС, если вызов API ОС терпит неудачу, и выполняет ec.clear() при отсутствии ошибок.Пример
#include <filesystem>
#include <fstream>
namespace fs = std::filesystem;
int main()
{
std::filesystem::path p = std::filesystem::current_path() / "sandbox";
std::filesystem::create_directories(p / "from");
std::ofstream{ p / "from/file1.txt" }.put('a');
std::filesystem::create_directory(p / "to");
// fs::rename(p / "from/file1.txt", p / "to/"); // error: "to" is a directory
fs::rename(p / "from/file1.txt", p / "to/file2.txt"); // OK
// fs::rename(p / "from", p / "to"); // error: "to" is not empty
fs::rename(p / "from", p / "to/subdir"); // OK
std::filesystem::remove_all(p);
}См. также
| переименовывает файл (функция) |
|
|
(C++17)(C++17) |
удаляет файл или пустой каталог удаляет файл или каталог и всё его содержимое рекурсивно (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/filesystem/rename