Namespaces
Variants

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

From cppreference.net
Definido en el encabezado <filesystem>
void create_symlink ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (desde C++17)
void create_symlink ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

std:: error_code & ec ) noexcept ;
(2) (desde C++17)
void create_directory_symlink ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(3) (desde C++17)
void create_directory_symlink ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

std:: error_code & ec ) noexcept ;
(4) (desde C++17)

Crea un enlace simbólico link con su destino establecido en target como si fuera mediante la función POSIX symlink() : la ruta target puede ser inválida o no existir.

Algunos sistemas operativos requieren la creación de enlaces simbólicos para identificar que el enlace es a un directorio. El código portable debe usar (3,4) para crear enlaces simbólicos de directorio en lugar de (1,2) , aunque no hay distinción en sistemas POSIX.

Contenidos

Parámetros

target - ruta a la que apuntará el enlace simbólico, no tiene que existir
link - ruta del nuevo enlace simbólico
ec - parámetro de salida para reportar errores en la sobrecarga que no lanza excepciones

Valor de retorno

(ninguno)

Excepciones

Cualquier sobrecarga no marcada como noexcept puede lanzar std::bad_alloc si la asignación de memoria falla.

1,3) Lanza std::filesystem::filesystem_error en errores de la API del sistema operativo subyacente, construido con target como primer argumento de ruta, link como segundo argumento de ruta, y el código de error del sistema operativo como argumento de código de error.
2,4) Establece un parámetro std:: error_code & al código de error de la API del sistema operativo si una llamada a la API del SO falla, y ejecuta ec. clear ( ) si no ocurren errores.

Notas

Algunos sistemas operativos no admiten enlaces simbólicos en absoluto o solo los admiten para archivos regulares.

Algunos sistemas de archivos no admiten enlaces simbólicos independientemente del sistema operativo, por ejemplo el sistema FAT utilizado en algunas tarjetas de memoria y unidades flash.

Al igual que un enlace físico, un enlace simbólico permite que un archivo tenga múltiples nombres lógicos. La presencia de un enlace físico garantiza la existencia de un archivo, incluso después de que se haya eliminado el nombre original. Un enlace simbólico no ofrece tal garantía; de hecho, el archivo nombrado por el argumento target no necesita existir cuando se crea el enlace. Un enlace simbólico puede cruzar límites de sistemas de archivos.

Ejemplo

#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");
}

Salida posible:

"sandbox/sym1"->"target"
"sandbox/sym2"->"subdir"

Véase también

(C++17) (C++17)
determina los atributos del archivo
determina los atributos del archivo, verificando el destino del enlace simbólico
(función)
obtiene el destino de un enlace simbólico
(función)
crea un enlace físico
(función)