Мне нужно пройти через разные каталоги на компьютере (через DirectoryInfo). Некоторые из них недоступны, и происходит UnauthorizedAccessException. Как проверить доступ к каталогу, не вылавливая исключение?
.NET. Проверьте, доступен ли каталог без обработки исключений.
Ответ 1
Вам нужно использовать пространство имен Security
.
См. этот ответ SO.
Из ответов:
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.
}
Обновление: (следующие комментарии)
FileIOPermission
относится к политикам безопасности, а не к разрешениям файловой системы, поэтому вам нужно использовать DirectoryInfo.GetAccessControl
.
Ответ 2
Проще говоря, вы не можете. Невозможно проверить, доступен ли каталог, все, что вы можете определить, это доступность. Причина, по которой, как только проверка завершится, разрешения могут быть изменены и аннулировать ваш чек. Наиболее надежной стратегией, которую вы можете реализовать, является доступ к каталогам и улавливание UnauthorizedAccessException
.
Недавно я написал статью в блоге по этому вопросу, которая здесь немного подробнее.
Ответ 3
вы могли бы просто создать небольшую логическую функцию и иметь переменную info каталога, чтобы получить каталоги из заданного пути. если это происходит без проблем, верните true, если исключение - это дескриптор, верните false или разделите предложение исключения на вспомогательные исключения и получите код ошибки.