std::experimental::filesystem:: rename
From cppreference.net
<
cpp
|
experimental
|
fs
|
Определено в заголовочном файле
<experimental/filesystem>
|
||
|
void
rename
(
const
path
&
old_p,
const
path
&
new_p
)
;
void rename ( const path & old_p, const path & new_p, std:: error_code & ec ) ; |
(filesystem TS) | |
Перемещает или переименовывает объект файловой системы, идентифицируемый 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 заканчивается на dot или на dot-dot .
- new_p указывает на несуществующий каталог, заканчивающийся разделителем каталогов.
- old_p является каталогом, который является родительским для new_p .
Содержание |
Параметры
| old_p | - | путь для перемещения или переименования |
| new_p | - | целевой путь для операции перемещения/переименования |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке |
Возвращаемое значение
(нет)
Исключения
The overload that does not take an error_code & parameter throws filesystem_error on underlying OS API errors, constructed with old_p as the first argument, new_p as the second argument, and the OS error code as the error code argument. std:: bad_alloc may be thrown if memory allocation fails. The overload taking an error_code & parameter sets it to the OS API error code if an OS API call fails, and executes ec. clear ( ) if no errors occur. This overload has
noexcept
спецификация:
noexcept
Пример
Запустить этот код
#include <experimental/filesystem> #include <fstream> #include <iostream> namespace fs = std::experimental::filesystem; int main() { fs::path p = fs::current_path() / "sandbox"; fs::create_directories(p/"from"); std::ofstream(p/"from/file1.txt").put('a'); fs::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 fs::remove_all(p); }
Смотрите также
|
переименовывает файл
(функция) |
|
|
удаляет файл или пустую директорию
удаляет файл или директорию и всё её содержимое, рекурсивно (функция) |