.NET - Проверить, доступен ли каталог без обработки исключений. - PullRequest
12 голосов
/ 25 февраля 2010

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

Ответы [ 3 ]

11 голосов
/ 25 февраля 2010

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

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

10 голосов
/ 25 февраля 2010

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

См. этот ТАК ответ.

Из ответов:

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.

0 голосов
/ 18 мая 2010

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

...