Namespaces
Variants

std::experimental::filesystem:: rename

From cppreference.net
Определено в заголовочном файле <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);
}

Смотрите также

переименовывает файл
(функция)
удаляет файл или пустую директорию
удаляет файл или директорию и всё её содержимое, рекурсивно
(функция)