std::filesystem::rename
Определён в заголовочном файле <filesystem> | ||
|---|---|---|
void rename( const std::filesystem::path& old_p,
const std::filesystem::path& new_p );
| (1) | (начиная с C++17) |
void rename( const std::filesystem::path& old_p,
const std::filesystem::path& new_p,
std::error_code& ec ) noexcept;
| (2) | (начиная с 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/cpp/filesystem/rename