std::experimental::filesystem::create_symlink, std::experimental::filesystem::create_directory_symlink
| Definiert im Header <experimental/filesystem> |
||
| void create_symlink( const path& target, const path& link ); void create_symlink( const path& target, const path& link, error_code& ec ); |
(1) | (Dateisystem-TS) |
| void create_directory_symlink( const path& target, const path& link ); void create_directory_symlink( const path& target, const path& link, error_code& ec ); |
(2) | (Dateisystem-TS) |
Erstellt einen symbolischen Link link, dessen Ziel auf target gesetzt ist, wie durch POSIX symlink(): Der Pfadname target darf ungültig oder nicht vorhanden sein.
Einige Betriebssysteme erfordern bei der Erstellung von symbolischen Links eine Kennzeichnung, dass der Link auf ein Verzeichnis verweist. Portabler Code sollte (2) verwenden, um Verzeichnis-Symlinks zu erstellen, anstatt (1), auch wenn es auf POSIX-Systemen keinen Unterschied gibt.
Inhalt |
[bearbeiten] Parameter
| target | - | Pfad, auf den der symbolische Link 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
Die Überladung ohne Parameter error_code& wirft filesystem_error bei Fehlern der zugrundeliegenden Betriebssystem-API. Diese wird mit target als erstem Argument, link als zweitem Argument und dem Fehlercode des Betriebssystems als Fehlercode-Argument konstruiert. std::bad_alloc kann geworfen werden, wenn die Speicherzuweisung fehlschlägt. Die Überladung mit einem Parameter error_code& setzt diesen auf den Fehlercode der Betriebssystem-API, wenn ein Aufruf der Betriebssystem-API fehlschlägt, und führt ec.clear() aus, wenn keine Fehler auftreten. Diese Überladung hat[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, z. B. das FAT-System, das auf einigen Speicher- und Flash-Karten verwendet wird.
Wie ein Hardlink erlaubt ein symbolischer Link, dass eine Datei mehrere logische Namen hat. Das Vorhandensein eines Hardlinks garantiert die Existenz einer Datei, auch nachdem der ursprüngliche Name entfernt wurde. Ein symbolischer Link bietet keine solche Garantie; tatsächlich muss die Datei, die durch das Argument target benannt wird, bei der Erstellung des Links nicht existieren. Ein symbolischer Link kann Dateisystemgrenzen überschreiten.
[bearbeiten] Beispiel
#include <experimental/filesystem> #include <iostream> namespace fs = std::experimental::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'; fs::remove_all("sandbox"); }
Mögliche Ausgabe
"sandbox/sym1"->"target" "sandbox/sym2"->"subdir"
[bearbeiten] Siehe auch
| ermittelt Dateiattribute ermittelt Dateiattribute, wobei das Ziel des symbolischen Links geprüft wird (Funktion) | |
| ermittelt das Ziel eines symbolischen Links (Funktion) | |
| erstellt einen Hardlink (Funktion) |