Я получаю UnautorizedAccessException
выполнение этого кода:
string[] fileList = Directory.GetFiles(strDir, strExt);
Исключение происходит в c:\users\username\appdata
Как проверить, есть ли у меня права доступа (список и чтение файлов)?
Я получаю 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
для корневого каталога. Catch UnauthorizedAccessException
- если нет, у вас есть полный доступ.
Если поймано - вызовите функцию для каждого поддира рекурсивно, поймайте исключение, если поймали - добавьте такой каталог в список.
Напишите рекурсивную функцию с внешним списком для запрещенных дисков