2010-02-25 11 views

Antwort

8

Sie müssen den Namespace Security verwenden.

Siehe this SO Antwort.

Aus den Antworten:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); 
if(!SecurityManager.IsGranted(writePermission)) 
{ 
    //No permission. 
    //Either throw an exception so this can be handled by a calling function 
    //or inform the user that they do not have permission to write to the folder and return. 
} 

Update: (folgende Kommentare)

FileIOPermission beschäftigt sich mit Sicherheitsrichtlinien nicht Berechtigungen Dateisystem, so müssen Sie DirectoryInfo.GetAccessControl verwenden.

+0

Ich habe versucht, das folgende: Dim readPermission A New FileIOPermission (FileIOPermissionAccess.Read, "C: \ Benutzer \ Admin \ Dokumente \ Eigene Bilder") Der obige Verzeichnis Zugriffsversuch "Zugriff verweigert", sondern „Security produziert .IsGranted (readPermission) "gibt immer wahr zurück. – SharpAffair

+0

Von http://msdn.microsoft.com/en-us/library/system.security.securymanager.isgranted.aspx: 'Das Gewähren von Berechtigungen wird durch Richtlinien festgelegt und unterscheidet sich von einer Anforderung, die Überschreibungen unterliegt, z. B. einer Bestätigung . Außerdem testet IsGranted nur die Erteilung der aufrufenden Code-Baugruppe unabhängig von anderen Aufrufern auf dem Stapel. – Oded

+6

Das ist nicht die richtige Antwort. FileIOPermission befasst sich mit CAS, nicht mit dem Dateisystem. Mit anderen Worten, ob die .NET-Sicherheitsrichtlinie den Zugriff zulässt. Sie können CAS-Zugriff haben, aber Windows kann es immer noch verweigern. DirectoryInfo.GetAccessControl() wird benötigt. –

9

Einfach gesagt können Sie nicht. Es gibt keine Möglichkeit zu überprüfen, ob ein Verzeichnis zugänglich ist. Sie können nur feststellen, dass es zugänglich ist. Der Grund dafür ist, dass sobald die Prüfung abgeschlossen ist, die Berechtigungen geändert werden können und Ihre Prüfung ungültig wird. Die zuverlässigste Strategie, die Sie implementieren können, besteht darin, auf die Verzeichnisse zuzugreifen und die UnauthorizedAccessException abzufangen.

Ich schrieb vor kurzem einen Blog-Artikel zu diesem Thema, die hier in ein wenig Detail

-1

Sie nur eine kleine, einfache Boolesche Funktion machen könnte geht und eine variable try Verzeichnis info hat um Verzeichnisse von einem bestimmten Pfad zu bekommen. Wenn es ohne Probleme durchläuft, gebe true zurück, wenn die Ausnahme behandelt wird, gib false zurück oder zerlege deine Ausnahmeklausel in Unterausnahmen und erhalte den Fehlercode.