Namespaces
Variants

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

From cppreference.net
Definiert im Header <filesystem>
void create_symlink ( const std:: filesystem :: path & target,
const std:: filesystem :: path & link ) ;
(1) (seit C++17)
void create_symlink ( const std:: filesystem :: path & target,

const std:: filesystem :: path & link,

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

const std:: filesystem :: path & link,

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

Erstellt einen symbolischen Link link mit seinem Ziel gesetzt auf target wie durch POSIX symlink() : der Pfadname target kann ungültig oder nicht existierend sein.

Einige Betriebssysteme erfordern die Erstellung von Symlinks, um zu kennzeichnen, dass der Link auf ein Verzeichnis verweist. Portabler Code sollte (3,4) verwenden, um Verzeichnis-Symlinks zu erstellen, anstatt (1,2) , obwohl es auf POSIX-Systemen keinen Unterschied gibt.

Inhaltsverzeichnis

Parameter

target - Pfad, auf den der Symlink zeigen soll; muss nicht existieren
link - Pfad des neuen symbolischen Links
ec - Out-Parameter für Fehlermeldungen in der nicht-werfenden Überladung

Rückgabewert

(keine)

Ausnahmen

Jede Überladung, die nicht als noexcept gekennzeichnet ist, kann std::bad_alloc auslösen, wenn die Speicherallokation fehlschlägt.

1,3) Wirft std::filesystem::filesystem_error bei zugrundeliegenden OS-API-Fehlern, konstruiert mit target als erstem Pfadargument, link als zweitem Pfadargument und dem OS-Fehlercode als Fehlercodeargument.
2,4) Setzt einen std:: error_code & Parameter auf den OS-API-Fehlercode, wenn ein OS-API-Aufruf fehlschlägt, und führt ec. clear ( ) aus, falls keine Fehler auftreten.

Hinweise

Einige Betriebssysteme unterstützen symbolische Links überhaupt nicht oder nur für reguläre Dateien.

Einige Dateisysteme unterstützen keine symbolischen Links, unabhängig vom Betriebssystem, zum Beispiel das FAT-System, das auf einigen Speicherkarten und Flash-Laufwerken verwendet wird.

Wie eine harte Verknüpfung ermöglicht eine symbolische Verknüpfung, dass eine Datei mehrere logische Namen hat. Das Vorhandensein einer harten Verknüpfung garantiert die Existenz einer Datei, selbst nachdem der ursprüngliche Name entfernt wurde. Eine symbolische Verknüpfung bietet keine solche Garantie; tatsächlich muss die durch das target Argument benannte Datei nicht existieren, wenn die Verknüpfung erstellt wird. Eine symbolische Verknüpfung kann Dateisystemgrenzen überschreiten.

Beispiel

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

Mögliche Ausgabe:

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

Siehe auch

(C++17) (C++17)
Bestimmt Dateiattribute
Bestimmt Dateiattribute, überprüft das Symlink-Ziel
(Funktion)
Ermittelt das Ziel eines symbolischen Links
(Funktion)
Erstellt einen Hard Link
(Funktion)