Das .Net Framework bietet mit dem
Windows erlaubt Links im Dateisystem, mit denen eine Datei/ein Ordner an einen anderen Ort "umgeleitet" werden kann. Dies erlaubt es z.B. den Inhalt zwei verschiedener Pfade synchron zu halten, oder es erlaubt das Verschieben von Dateien und Ordnern an einen anderen Ort, obwohl die eigentlich nicht vorgesehen ist.
Das Framework bietet von Haus aus leider keine Möglichkeit, diese Links zu erstellen und zu bearbeiten, weswegen man auf die Windows API zurückgreifen muss. Da es dabei nicht mit einem einfachen Aufruf getan ist veröffentliche ich hier meine Ergebnisse, damit anderen die stundenlange Arbeit erspart bleibt. Beachtet, dass sich dieser Code ausschließlich auf das Erstellen von Ordner-Links bezieht, es können damit keine Dateien gelinkt werden.
Es gibt zwei verschiedene Arten von Links, die für mein Vorhaben in Frage kamen,
Ich habe mich für Junctions entschieden, da keine Administratorrechte erforderlich sind, um Junctions zu erstellen, im Gegensatz zu Symbolic links. Beachtet, dass Junctions dafür ausschließlich auf lokale Partitionen verweisen können.
Codebeispiel
Die Klassen im
Link erstellen:
Link bearbeiten:
Link löschen:
Prüfen, ob ein Link existiert:
Ziel eines Links abfragen:
Für alle Funktionen gibt es auch ein objektorientiertes Äquivalent durch die
System.IO
-Namespace einen guten Wrapper für die meisten IO-Operationen, allerdings musste ich kürzlich eine spezifische Funktionalität vermissen.Windows erlaubt Links im Dateisystem, mit denen eine Datei/ein Ordner an einen anderen Ort "umgeleitet" werden kann. Dies erlaubt es z.B. den Inhalt zwei verschiedener Pfade synchron zu halten, oder es erlaubt das Verschieben von Dateien und Ordnern an einen anderen Ort, obwohl die eigentlich nicht vorgesehen ist.
Das Framework bietet von Haus aus leider keine Möglichkeit, diese Links zu erstellen und zu bearbeiten, weswegen man auf die Windows API zurückgreifen muss. Da es dabei nicht mit einem einfachen Aufruf getan ist veröffentliche ich hier meine Ergebnisse, damit anderen die stundenlange Arbeit erspart bleibt. Beachtet, dass sich dieser Code ausschließlich auf das Erstellen von Ordner-Links bezieht, es können damit keine Dateien gelinkt werden.
Es gibt zwei verschiedene Arten von Links, die für mein Vorhaben in Frage kamen,
Junctions
und Symbolic links
. Beide Link-Arten fallen unter die Softlinks, sie funktionieren also Partitionsübergreifend.Ich habe mich für Junctions entschieden, da keine Administratorrechte erforderlich sind, um Junctions zu erstellen, im Gegensatz zu Symbolic links. Beachtet, dass Junctions dafür ausschließlich auf lokale Partitionen verweisen können.
Codebeispiel
Die Klassen im
JunctionNET.IO
-Namespace verhalten sich weitestgehend so wie System.IO.Directory
und System.IO.DirectoryInfo
.Link erstellen:
Link bearbeiten:
Link löschen:
Prüfen, ob ein Link existiert:
Ziel eines Links abfragen:
Für alle Funktionen gibt es auch ein objektorientiertes Äquivalent durch die
JunctionInfo
-Klasse.