Подтвердить что ты не робот

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

Я получаю UnautorizedAccessException выполнение этого кода:

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

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

4b9b3361

Ответ 1

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

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 
}

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

Ответ 2

Проверьте статью о проекте кода, которая касается того, что вам нужно, для этого создан класс: Цель этого класса - дать простой ответ на общий вопрос: "У меня есть разрешение на чтение или запись этого файла?".

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

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

Ответ 3

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

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

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