Namespaces
Variants

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

From cppreference.net
Défini dans l'en-tête <filesystem>
void create_symlink ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (depuis C++17)
void create_symlink ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

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

const std:: filesystem :: path & link,

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

Crée un lien symbolique link avec sa cible définie sur target comme le ferait la fonction POSIX symlink() : le chemin target peut être invalide ou inexistant.

Certains systèmes d'exploitation nécessitent la création de liens symboliques pour identifier que le lien pointe vers un répertoire. Le code portable devrait utiliser (3,4) pour créer des liens symboliques de répertoire plutôt que (1,2) , même s'il n'y a pas de distinction sur les systèmes POSIX.

Table des matières

Paramètres

target - chemin vers lequel pointer le lien symbolique, n'a pas besoin d'exister
link - chemin du nouveau lien symbolique
ec - paramètre de sortie pour le rapport d'erreur dans la surcharge non-lançante

Valeur de retour

(aucun)

Exceptions

Toute surcharge non marquée noexcept peut lever std::bad_alloc si l'allocation de mémoire échoue.

1,3) Lance std::filesystem::filesystem_error en cas d'erreurs de l'API système sous-jacente, construit avec target comme premier argument de chemin, link comme deuxième argument de chemin, et le code d'erreur du système comme argument de code d'erreur.
2,4) Définit un paramètre std:: error_code & au code d'erreur de l'API du système d'exploitation si un appel d'API du système d'exploitation échoue, et exécute ec. clear ( ) si aucune erreur ne survient.

Notes

Certains systèmes d'exploitation ne prennent pas du tout en charge les liens symboliques ou ne les prennent en charge que pour les fichiers réguliers.

Certains systèmes de fichiers ne prennent pas en charge les liens symboliques, quel que soit le système d'exploitation, par exemple le système FAT utilisé sur certaines cartes mémoire et clés USB.

Comme un lien physique, un lien symbolique permet à un fichier d'avoir plusieurs noms logiques. La présence d'un lien physique garantit l'existence d'un fichier, même après que le nom original a été supprimé. Un lien symbolique n'offre aucune telle assurance ; en fait, le fichier désigné par l'argument target n'a pas besoin d'exister lors de la création du lien. Un lien symbolique peut traverser les limites des systèmes de fichiers.

Exemple

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

Sortie possible :

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

Voir aussi

(C++17) (C++17)
détermine les attributs de fichier
détermine les attributs de fichier en vérifiant la cible du lien symbolique
(fonction)
obtient la cible d'un lien symbolique
(fonction)
crée un lien physique
(fonction)