std::filesystem::create_symlink, std::filesystem::create_directory_symlink
Определено в заголовке <filesystem> | ||
|---|---|---|
void create_symlink( const std::filesystem::path& target,
const std::filesystem::path& link );
| (1) | (начиная с C++17) |
void create_symlink( const std::filesystem::path& target,
const std::filesystem::path& link,
std::error_code& ec ) noexcept;
| (2) | (начиная с C++17) |
void create_directory_symlink( const std::filesystem::path& target,
const std::filesystem::path& link );
| (3) | (начиная с C++17) |
void create_directory_symlink( const std::filesystem::path& target,
const std::filesystem::path& link,
std::error_code& ec ) noexcept;
| (4) | (начиная с C++17) |
Создаёт символическую ссылку link, указывающую на target, как если бы был вызван POSIX symlink(): путь target может быть некорректным или несуществующим.
В некоторых операционных системах при создании символической ссылки необходимо указывать, что ссылка ведёт на каталог. Для переносимого кода при создании символических ссылок на каталоги следует использовать (3,4), а не (1,2), хотя в системах POSIX различий между ними нет.
Параметры
| target | - | путь, на который должна указывать символическая ссылка; он не обязан существовать |
| link | - | путь новой символической ссылки |
| ec | - | выходной параметр для передачи сведений об ошибке в невыбрасывающей перегрузке |
Возвращаемое значение
(отсутствует)
Исключения
Любая перегрузка, не отмеченная noexcept, может выбросить std::bad_alloc, если выделение памяти завершится неудачно.
std::filesystem::filesystem_error, созданное с target в качестве первого аргумента-пути, link в качестве второго аргумента-пути и кодом ошибки ОС в качестве аргумента кода ошибки.std::error_code& код ошибки ОС, а при отсутствии ошибок выполняет ec.clear().Примечания
Некоторые операционные системы вообще не поддерживают символические ссылки или поддерживают их только для обычных файлов.
Некоторые файловые системы не поддерживают символические ссылки независимо от операционной системы, например файловая система FAT, используемая на некоторых картах памяти и флеш-накопителях.
Как и жёсткая ссылка, символическая ссылка позволяет файлу иметь несколько логических имён. Наличие жёсткой ссылки гарантирует существование файла, даже после удаления исходного имени. Символическая ссылка такой гарантии не даёт; более того, файл, указанный аргументом target, может не существовать на момент создания ссылки. Символическая ссылка может пересекать границы файловых систем.
Пример
#include <cassert>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
fs::create_directories("sandbox/subdir");
fs::create_symlink("target", "sandbox/sym1");
fs::create_directory_symlink("subdir", "sandbox/sym2");
for (auto it = fs::directory_iterator("sandbox"); it != fs::directory_iterator(); ++it)
if (is_symlink(it->symlink_status()))
std::cout << *it << "->" << read_symlink(*it) << '\n';
assert(std::filesystem::equivalent("sandbox/sym2", "sandbox/subdir"));
fs::remove_all("sandbox");
}
Возможный вывод:
"sandbox/sym1"->"target" "sandbox/sym2"->"subdir"
См. также
|
(C++17)(C++17) | определяет атрибуты файла определяет атрибуты файла с проверкой цели символической ссылки (функция) |
|
(C++17) | получает цель символической ссылки (функция) |
|
(C++17) | создаёт жёсткую ссылку (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/filesystem/create_symlink