Hallo,
ich habe gerade versucht mit Directory.GetDirectories das Dateisystem zu lesen.
Zu meiner großen Überraschung bekomme ich allerdings nicht den echten Pfad zurück, sondern den Alias.
Also statt C:\Users bekomme ich C:\Benutzer !!!
Beim Zugriff auf den Alias bekomme ich dann ein UnauthorizedAccessException, weil ein Zugriff auf diesen Alias nicht möglich ist.
Wo ist denn der Sinn dieses Verhaltens? Kann mir jemand sagen, wie man den echten Namen erhält, mit dem man dann auch arbeiten kann?
Achso ich versuche das unter Win7 aber ich denke das ist unter Vista nicht anders...
Grüße
Wooky
Hallo Wooky,
wenn ich Directory.GetDirectories
auf C:\ mache, bokomme ich C:\Users.
Ich verwende Windows 7 Professional x64.
mfg.
markus111
Hallo Wooky,
das kann ich auch nicht bestätigen (deutsches Win 7 Prof. 64bit) / Probiere es mal mit folgendem Code:
foreach (string directory in Directory.GetDirectories("C:\\"))
Console.WriteLine(directory);
gibt bei mir unter anderem aus:
C:$Recycle.Bin
C:\Config.Msi
C:\Documents and Settings
C:\Dokumente und Einstellungen
C:\PerfLogs
C:\Program Files
C:\Program Files (x86)
C:\ProgramData
C:\Programme
C:\System Volume Information
C:\Users
C:\Windows
Oh sorry,
ich war zu Tippfaul und wollte mir den ganzen Pfad sparen, weil ich dachte es wäre bei allen Verzeichnissen, aber scheinbar ist das nicht so.
Das Problem tritt konkrett unterhalb von documents auf. Hier erhalte ich:
C:\Users\test\documents\Eigene Bilder
C:\Users\test\documents\Eigene Musik
C:\Users\test\documents\Eigene Videos
obwohl es die Verzeichnisse da gar nicht gibt.
C:\Users\test\documents\Eigene Bilder
C:\Users\test\documents\Eigene Musik
C:\Users\test\documents\Eigene Videos
Diese Verzeichnisse gibt es auch, sind aber keine richtigen Ordner, sondern nur symbolische Links (kann man z. B. im TotalCommander sehen).
mfg.
markus111
Um solche Exceptions zu vermeiden:
FileAttributes attributes = File.GetAttributes(directory);
if ((attributes & FileAttributes.System) == 0
&& (attributes & FileAttributes.ReparsePoint) == 0)
{
//...
}