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,
|
(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,
|
(4) | (начиная с C++17) |
Создает символическую ссылку
link
с целевым объектом
target
как при использовании POSIX
symlink()
: путь
target
может быть некорректным или несуществующим.
Некоторые операционные системы требуют создания символьных ссылок с указанием, что ссылка ведет на каталог. Переносимый код должен использовать (3,4) для создания символьных ссылок на каталоги вместо (1,2) , несмотря на отсутствие различий в POSIX-системах.
Содержание |
Параметры
| target | - | путь, на который должна указывать символическая ссылка; может не существовать |
| link | - | путь новой символической ссылки |
| ec | - | выходной параметр для сообщения об ошибках в непорождающей исключения перегрузке |
Возвращаемое значение
(нет)
Исключения
Любая перегрузка, не помеченная
noexcept
, может выбрасывать
std::bad_alloc
при неудачном выделении памяти.
Примечания
Некоторые операционные системы не поддерживают символические ссылки вообще или поддерживают их только для обычных файлов.
Некоторые файловые системы не поддерживают символические ссылки независимо от операционной системы, например система 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)
|
создает жесткую ссылку
(функция) |