Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
Definiert in 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, dessen Ziel target ist, als ob durch POSIX symlink(): der Pfadname target kann ungültig oder nicht vorhanden sein.

Einige Betriebssysteme erfordern bei der Erstellung von Symlinks eine Kennzeichnung, dass der Link zu einem Verzeichnis führt. Portabler Code sollte (3,4) zur Erstellung von Verzeichnissymlinks anstelle von (1,2) verwenden, obwohl es auf POSIX-Systemen keinen Unterschied gibt.

Inhalt

[bearbeiten] Parameter

target - Pfad, auf den der Symlink zeigen soll, muss nicht existieren
link - Pfad des neuen symbolischen Links
ec - Ausgabeparameter für die Fehlerberichterstattung in der nicht auslösenden Überladung

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Ausnahmen

Jede Überladung, die nicht als noexcept markiert ist, kann std::bad_alloc auslösen, wenn die Speicherzuweisung 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, wenn keine Fehler auftreten.

[bearbeiten] Hinweise

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

Einige Dateisysteme unterstützen symbolische Links unabhängig vom Betriebssystem nicht, zum Beispiel das FAT-System, das auf einigen Speicher- und Flash-Karten verwendet wird.

Ähnlich wie ein Hardlink ermöglicht ein symbolischer Link, dass eine Datei mehrere logische Namen hat. Die Existenz eines Hardlinks garantiert die Existenz einer Datei, auch nachdem der ursprüngliche Name entfernt wurde. Ein symbolischer Link bietet keine solche Zusicherung; tatsächlich muss die Datei mit dem Namen im Argument target nicht existieren, wenn der Link erstellt wird. Ein symbolischer Link kann Dateisystemgrenzen überschreiten.

[bearbeiten] 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"

[bearbeiten] Siehe auch

(C++17)(C++17)
ermittelt Dateiattribute
ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird
(Funktion) [bearbeiten]
ermittelt das Ziel eines symbolischen Links
(Funktion) [bearbeiten]
erstellt einen Hardlink
(Funktion) [bearbeiten]