Мне нужно пройти через различные каталоги на компьютере (через DirectoryInfo). Некоторые из них недоступны, и происходит UnauthorizedAccessException. Как проверить доступ к каталогу, не вылавливая исключение?.NET - Проверьте, доступен ли каталог без обработки исключений
ответ
Вам необходимо использовать пространство имен 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
.
Проще говоря, вы не можете. Невозможно проверить, доступен ли каталог, все, что вы можете определить, это доступность. Причина, по которой, как только проверка завершится, разрешения могут быть изменены и аннулировать ваш чек. Самая надежная стратегия, которую вы можете реализовать, - это получить доступ к каталогам и поймать UnauthorizedAccessException
.
Я написал статью в блоге на эту тему в последнее время, который идет в немного здесь подробно
вы могли бы просто сделать простую маленькую булеву функцию и имеют переменную попробовать каталог информации для получения каталогов с заданного пути. если это происходит без проблем, верните true, если исключение - это дескриптор, верните false или разделите предложение исключения на вспомогательные исключения и получите код ошибки.
Я попробовал следующее: Dim readPermission As New FileIOPermission (FileIOPermissionAccess.Read, "C: \ Users \ Admin \ Documents \ My Pictures") выше попытка доступа к каталогам дает "Access Denied", но «SecurityManager .IsGranted (readPermission) "всегда возвращает true. – SharpAffair
Из http://msdn.microsoft.com/en-us/library/system.security.securitymanager.isgranted.aspx: «Предоставление разрешений определяется политикой и отличается от требования, подлежащего переопределению, например, утверждения , Кроме того, IsGranted тестирует только предоставление сборки вызывающего кода, независимо от других вызывающих абонентов в стеке. « – Oded
Это неправильный ответ. FileIOPermission имеет дело с CAS, а не с файловой системой. Другими словами, разрешает ли доступ к политике безопасности .NET. Вы можете иметь доступ к CAS, но Windows все равно может его отказать. Требуется DirectoryInfo.GetAccessControl(). –