.NET. Проверьте, доступен ли каталог без обработки исключений.

Мне нужно пройти через разные каталоги на компьютере (через DirectoryInfo). Некоторые из них недоступны, и происходит UnauthorizedAccessException. Как проверить доступ к каталогу, не вылавливая исключение?

Ответ 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 или разделите предложение исключения на вспомогательные исключения и получите код ошибки.