std::filesystem:: create_symlink, std::filesystem:: create_directory_symlink
|
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,
|
(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,
|
(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.
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) |
|
(C++17)
|
obtient la cible d'un lien symbolique
(fonction) |
|
(C++17)
|
crée un lien physique
(fonction) |