Я добираюсь UnautorizedAccessException
выполнение этого кода:
string[] fileList = Directory.GetFiles(strDir, strExt);
Исключение происходит в c:\users\username\appdata
Как я могу проверить, есть ли у меня право доступа (чтобы перечислить и считать файлы)?
Прежде всего, я бы вручную проверил разрешения и посмотрел, что вас блокирует, а что нет. Я использую что-то вроде этого, чтобы проверить права доступа (для копирования файла):
AuthorizationRuleCollection acl = fileSecurity.GetAccessRules(true, true,typeof(System.Security.Principal.SecurityIdentifier));
bool denyEdit = false;
for (int x = 0; x < acl.Count; x++)
{
FileSystemAccessRule currentRule = (FileSystemAccessRule)acl[x];
AccessControlType accessType = currentRule.AccessControlType;
//Copy file cannot be executed for "List Folder/Read Data" and "Read extended attributes" denied permission
if (accessType == AccessControlType.Deny && (currentRule.FileSystemRights & FileSystemRights.ListDirectory) == FileSystemRights.ListDirectory)
{
//we have deny copy - we can't copy the file
denyEdit = true;
break;
}
... more checks
}
Кроме того, бывают странные случаи, когда определенное право на папку изменяет права для файлов независимо от их индивидуальных разрешений (посмотрю, смогу ли я найди что это).
Сначала вызовите Directory.GetFiles
для корневого каталога. Перехватите UnauthorizedAccessException
- если нет, у вас есть полный доступ.
При обнаружении - рекурсивно вызывать функцию для каждого подкаталога, ловить исключение, при обнаружении - добавлять такой каталог в список.
Напишите рекурсивную функцию с внешним списком запрещенных каталогов
Проверьте статью о проекте кода, которая посвящена тому, что вы Для этого создан класс is: Цель этого класса - дать простой ответ на распространенный вопрос: «Есть ли у меня разрешение на чтение или запись этого файла?».
Простой способ проверить индивидуальные права доступа для данного файла и пользователя
Примечание: нельзя размещать здесь весь код, потому что он слишком длинный.