std::filesystem::create_symlink, std::filesystem::create_directory_symlink
| 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, |
(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, |
(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.
[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) |
| (C++17) |
ermittelt das Ziel eines symbolischen Links (Funktion) |
| (C++17) |
erstellt einen Hardlink (Funktion) |