Я должен пройти различные каталоги на компьютере (через DirectoryInfo). Некоторые из них не доступны, и UnauthorizedAccessException происходит. Как я могу проверить доступ каталога, не ловя исключение?
Вам необходимо использовать пространство имен 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
.
Проще говоря, вы не можете. Не существует способа проверить, доступен ли каталог, все, что вы можете определить, это то, что он был доступен. Причина в том, что как только проверка завершится, разрешения могут измениться и сделать проверку недействительной. Самая надежная стратегия, которую вы можете применить, это получить доступ к каталогам и поймать UnauthorizedAccessException
.
Недавно я написал статью в блоге на эту тему, в которой немного подробно рассказывается здесь
вы можете просто создать небольшую простую логическую функцию и заставить переменную информации о каталоге попытаться получить каталоги по заданному пути. если все прошло без проблем, верните истину, если исключение - дескриптор, верните ложь или разбейте ваше исключение на дополнительные исключения и получите код ошибки.