2010-02-25 1 views

ответ

8

Вам необходимо использовать пространство имен Security.

См. this Ответьте так.

Из ответов:

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: (следующие комментарии)

FileIOPermission занимается политикой безопасности не файловой системы разрешения, поэтому вам нужно использовать DirectoryInfo.GetAccessControl.

+0

Я попробовал следующее: Dim readPermission As New FileIOPermission (FileIOPermissionAccess.Read, "C: \ Users \ Admin \ Documents \ My Pictures") выше попытка доступа к каталогам дает "Access Denied", но «SecurityManager .IsGranted (readPermission) "всегда возвращает true. – SharpAffair

+0

Из http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx: «Предоставление разрешений определяется политикой и отличается от требования, подлежащего переопределению, например, утверждения , Кроме того, IsGranted тестирует только предоставление сборки вызывающего кода, независимо от других вызывающих абонентов в стеке. « – Oded

+6

Это неправильный ответ. FileIOPermission имеет дело с CAS, а не с файловой системой. Другими словами, разрешает ли доступ к политике безопасности .NET. Вы можете иметь доступ к CAS, но Windows все равно может его отказать. Требуется DirectoryInfo.GetAccessControl(). –

9

Проще говоря, вы не можете. Невозможно проверить, доступен ли каталог, все, что вы можете определить, это доступность. Причина, по которой, как только проверка завершится, разрешения могут быть изменены и аннулировать ваш чек. Самая надежная стратегия, которую вы можете реализовать, - это получить доступ к каталогам и поймать UnauthorizedAccessException.

Я написал статью в блоге на эту тему в последнее время, который идет в немного здесь подробно

-1

вы могли бы просто сделать простую маленькую булеву функцию и имеют переменную попробовать каталог информации для получения каталогов с заданного пути. если это происходит без проблем, верните true, если исключение - это дескриптор, верните false или разделите предложение исключения на вспомогательные исключения и получите код ошибки.