Tipp der Woche
13.10.2022, 12:30 Uhr
.NET/VB/C#: Special Directories
Windows kennt eine lange Liste spezieller Verzeichnisse, wie etwa Desktop, Downloads oder Dokumente, deren exakten Pfad man per Programm abfragen kann.
Eine Lösung, die einige der festen Ordner kennt steckt im Namensraum Microsoft.VisualBasic.FileIO, genauer in der Klasse SpecialDirectories. Die Klasse gehört zum .NET Framework seit Version 2.0 und ist auch in der .NET-Core-Schiene vertreten bis hin zum .NET 7 (derzeit als RC1 gelistet).
Die Klasse SpecialDirectories hat die folgenden Eigenschaften, die abgefragt werden können:
- AllUsersApplicationData: Pfad zum Application Data Directory für alle Benutzer.
- CurrentUserApplicationData: Pfad zum Application Data Directory des aktuellen Benutzers.
- Desktop: Pfad zum Desktop-Verzeichnis.
- MyDocuments: Pfad zum Dokumente-Ordner.
- MyMusic: Pfad zum Musik-Ordner.
- MyPictures: Pfad zum Bilder-Ordner.
- ProgramFiles: Pfad zum Verzeichnis Program Files.
- Programs: Pfad zum Ordner Programs.
- Temp: Pfad zum Temp-Verzeichnis.
Hat der Anwender die Standard-Windows-Verzeichnisse umgeleitet, so werden die umgeleiteten Ordner ausgegeben. Die Nutzung sieht beispielsweise so aus:
MsgBox(FileIO.MyDocuments)
Zudem befindet sich auch im Namespace System.Environment die Klasse SpecialFolder, welche noch einige zusätzliche feste Windows-Ordner kennt, die mit Hilfe der Funktion Environment.GetFolderPath abgefragt werden können:
MsgBox(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))
' oder
MsgBox(Environment.GetFolderPath(Environment.SpecialFolder.Recent))
' holt den Pfad zum Verzeichnis mit den vom Anwender zuletzt
' benutzten Dokumenten (Recent).
Beim genaueren Hinsehen fällt jedoch auf, dass mit beiden Klassen nicht ermittelt werden kann, welches das Download-Verzeichnis ist. Zudem gibt es noch eine ganze Menge weiterer fester Ordner in Windows, für die man sich interessieren könnte. Ein Versuch einfach den Pfad nach dem folgenden Schema zusammenzubauen scheitert, wenn der Anwender den Ordner umgeleitet hat. Dann gibt es den Ordner zwar, aber es steht nichts drin, weil der vom System benutzte Ordner ganz wo anders zu finden ist.
' Standard-Schema
C:\Users\[Username]\Downloads
' liefert bei mir den leeren Ordner C:\Users\bl\Downloads
' der Downloads-Ordner ist umgeleitet auf Laufwerk D:
Eine funktionierende Lösung für die noch fehlenden Ordner liefert Bob Jalapeno für VB.NET auf dieser Seite. Seine Lösung fußt auf der Vorarbeit von Ray Koopa, der eine Lösung für C# entwickelt hat.
Übrigens wird erwogen, eine Lösung für dieses Problem in .NET 8 aufzunehmen. Ray Koopa hat einen eigenen API-Vorschlag gemacht, den Sie hier im dotnet GitHub Repository checken können.