Namespaces
Variants

std::filesystem:: create_symlink, std::filesystem:: create_directory_symlink

From cppreference.net
Определено в заголовочном файле <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 при неудачном выделении памяти.

1,3) Выбрасывает std::filesystem::filesystem_error при ошибках базового API ОС, создавая исключение с target в качестве первого аргумента пути, link в качестве второго аргумента пути и кодом ошибки ОС в качестве аргумента кода ошибки.
2,4) Устанавливает параметр std:: error_code & в код ошибки API операционной системы при сбое вызова OS 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)
определяет атрибуты файла
определяет атрибуты файла, проверяя цель символической ссылки
(функция)
получает цель символической ссылки
(функция)
создает жесткую ссылку
(функция)