Namespaces
Variants

std::filesystem:: rename

From ru.cppreference.net
Определено в заголовке <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 заканчивается на dot или на dot-dot .
  • 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)
удаляет файл или пустую директорию
удаляет файл или директорию и всё её содержимое рекурсивно
(функция)