std::filesystem::create_symlink, std::filesystem::create_directory_symlink
Defined in header <filesystem> |
||
|---|---|---|
void create_symlink( const std::filesystem::path& target,
const std::filesystem::path& link );
|
(1) | (since C++17) |
void create_symlink( const std::filesystem::path& target,
const std::filesystem::path& link,
std::error_code& ec ) noexcept;
|
(2) | (since C++17) |
void create_directory_symlink( const std::filesystem::path& target,
const std::filesystem::path& link );
|
(3) | (since C++17) |
void create_directory_symlink( const std::filesystem::path& target,
const std::filesystem::path& link,
std::error_code& ec ) noexcept;
|
(4) | (since C++17) |
Создаёт символическую ссылку link с целевым объектом target так, как это делает POSIX symlink(): путь target может быть некорректным или несуществующим.
Некоторые операционные системы требуют, чтобы при создании символической ссылки на каталог была указана информация о том, что ссылка ведёт на каталог. Переносимый код должен использовать (3,4) для создания символических ссылок на каталоги, а не (1,2), даже если на системах POSIX разницы нет.
Параметры
| target | - | путь, на который указывает символическая ссылка, может быть не существующим |
| link | - | путь новой символической ссылки |
| ec | - | параметр вывода для отчёта об ошибках в варианте перегрузки без исключений |
Возвращаемое значение
(ничего)
Исключения
Любая перегрузка, не помеченная noexcept, может выбросить std::bad_alloc, если выделение памяти завершится неудачей.
std::filesystem::filesystem_error при ошибках в API ОС, созданном с target как первым аргументом пути, link как вторым аргументом пути и кодом ошибки ОС как аргументом ошибки.std::error_code& в код ошибки API ОС, если вызов API ОС завершился неудачей, и выполняет 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/w/cpp/filesystem/create_symlink