Проверка права доступа файла/папки

Я добираюсь UnautorizedAccessException выполнение этого кода:

string[] fileList = Directory.GetFiles(strDir, strExt);

Исключение происходит в c:\users\username\appdata Как я могу проверить, есть ли у меня право доступа (чтобы перечислить и считать файлы)?

9
задан abatishchev 11 August 2010 в 08:09
поделиться

3 ответа

Прежде всего, я бы вручную проверил разрешения и посмотрел, что вас блокирует, а что нет. Я использую что-то вроде этого, чтобы проверить права доступа (для копирования файла):

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 
}

Кроме того, бывают странные случаи, когда определенное право на папку изменяет права для файлов независимо от их индивидуальных разрешений (посмотрю, смогу ли я найди что это).

9
ответ дан 4 December 2019 в 12:57
поделиться

Сначала вызовите Directory.GetFiles для корневого каталога. Перехватите UnauthorizedAccessException - если нет, у вас есть полный доступ.

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

Напишите рекурсивную функцию с внешним списком запрещенных каталогов

3
ответ дан 4 December 2019 в 12:57
поделиться

Проверьте статью о проекте кода, которая посвящена тому, что вы Для этого создан класс is: Цель этого класса - дать простой ответ на распространенный вопрос: «Есть ли у меня разрешение на чтение или запись этого файла?».

Простой способ проверить индивидуальные права доступа для данного файла и пользователя

Примечание: нельзя размещать здесь весь код, потому что он слишком длинный.

4
ответ дан 4 December 2019 в 12:57
поделиться