FileSystemRights :(
От: Пельмешко Россия blog
Дата: 20.12.09 10:38
Оценка:
Здравствуйте, господа!

Нужно чтобы это:

    public static IEnumerable<FileInfo> Traverse(DirectoryInfo dir, string pattern)
    {
      foreach (var file in dir.GetFiles(pattern))
      {
        yield return file;
      }

      foreach (var sub in dir.GetDirectories())
      {
        foreach (var file in Traverse(sub, pattern))
        {
          yield return file;
        }
      }
    }

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

Просто ловить UnauthorizedAccessException счёл некошерным, стал разбираться с правами доступа...
И тут же упёрся в "C:\Documents and settings" (Windows7 RC)...

    var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());

    var rules =
      new DirectoryInfo("C:\\Documents and settings")
      .GetAccessControl(AccessControlSections.Access)
      .GetAccessRules(true, true, typeof(NTAccount));

    foreach (FileSystemAccessRule rule in rules)
    {
      if (principal.IsInRole(rule.IdentityReference.Value))
      {
        Console.WriteLine("User: '{0}'", rule.IdentityReference.Value);
        Console.WriteLine("{0}: '{1}'", rule.AccessControlType, rule.FileSystemRights);
      }
    }

Говорит:

User: 'Все'
Deny: 'ReadData'
User: 'Все'
Allow: 'ReadAndExecute, Synchronize'


Вроде достаточно требований чтобы сделать DirectoryInfo.GetFiles(), но оно падает...
Объясните, пожалуйста, как просто проверить, есть у меня доступ на получение списка файлов и директорий, или нет...

p.s. Не понимаю что приоритетенее, allow или deny... порядок rules что ли важен?
p.p.s. Из Explorer'а тоже Documents and settings не открыть: "отказано в доступе".
p.p.p.s. Извините, если подобная тема поднималась, не нагуглилось ничего конкретного, всем советуют exception'ы ловить...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.