使用getDirectories的UnauthorizedAccessException

时间:2016-05-25 15:22:11

标签: c# unauthorizedaccessexcepti getdirectories

大家好,我目前通过此次调用获得了我想要的子目录:

foreach (DirectoryInfo dir in parent)
      {
        try
        {
          subDirectories = dir.GetDirectories().Where(d => d.Exists == true).ToArray();
        }
        catch(UnauthorizedAccessException e)
        {
          Console.WriteLine(e.Message);
        }
        foreach (DirectoryInfo subdir in subDirectories)
        {
          Console.WriteLine(subdir);
          var temp = new List<DirectoryInfo>();
          temp = subdir.GetDirectories("*", SearchOption.AllDirectories).Where(d => reg.IsMatch(d.Name)).Where((d => !d.FullName.EndsWith("TESTS"))).Where(d => !(d.GetDirectories().Length == 0 && d.GetFiles().Length == 0)).Where(d => d.GetFiles().Length > 3).ToList();
          candidates.AddRange(temp);
        }
      }

      foreach(DirectoryInfo dir in candidates)
      {
        Console.WriteLine(dir);
      }

所以现在我的问题是我的最终列表名为候选人我得不到任何东西因为我在try块中的子目录文件夹中找到了一个名为lost +的文件夹而导致访问问题。我尝试使用try和catch来处理异常,所以我可以继续做我的检查我实际上不关心这个文件夹,我试图忽略它,但我不知道如何忽略它从我的get目录搜索任何想法?我已经尝试使用.where来做一个过滤器来忽略任何包含文件夹名称的文件夹但是它没有用,它只是在文件夹名称中停止了我的程序。

2 个答案:

答案 0 :(得分:0)

您可以像Microsoft解释的那样使用递归:link

答案 1 :(得分:0)

我对此异常(UnauthorizedAccessException)有同样的问题(ResourceContext.GetForCurrentView call exception),此链接可以解释为什么会发生这种情况:

  

http://www.blackwasp.co.uk/FolderRecursion.aspx

简短的引用:

  

...其中的关键是你尝试的一些文件夹   可以配置read以便当前用户可以不访问它们。   不是忽略您限制访问的文件夹,而是   方法抛出UnauthorizedAccessException。但是,我们可以   通过创建我们自己的递归文件夹搜索来解决这个问题   码。 ...

溶液:

private static void ShowAllFoldersUnder(string path, int indent)
{
    try
    {
        foreach (string folder in Directory.GetDirectories(path))
        {
            Console.WriteLine("{0}{1}", new string(' ', indent), Path.GetFileName(folder));
            ShowAllFoldersUnder(folder, indent + 2);
        }
    }
    catch (UnauthorizedAccessException) { }
}