std::filesystem:: create_symlink, std::filesystem:: create_directory_symlink
|
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,
|
(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
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.
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) |
|
(C++17)
|
Ermittelt das Ziel eines symbolischen Links
(Funktion) |
|
(C++17)
|
Erstellt einen Hard Link
(Funktion) |