2016-05-25 42 views
4

大家好我目前得到的子目录我通过这个电话想:UnauthorizedAccessException与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过滤器来忽略任何包含文件夹名称的文件夹,但是它没有工作,或者它只是停止了我的程序在文件夹名称。

+0

这个问题已经回答,请参阅以下内容:[链接](http://stackoverflow.com/questions/172544/ignore-folders-files-when-目录获取文件被拒绝访问) –

+0

这是为了获取文件,但我需要的目录不是文件 – JPhillips

+0

你尝试过使用'Directory.EnumerateDirectories()'?它提供了更多的灵活性,并且允许您至少在找到目录时获取目录的名称。不幸的是,隐藏的系统目录像'lost + found'会导致'UnauthorizedAccessException'。请确保您使用默认的“SearchOption”,以便搜索不会自动进入任何子目录。 –

回答

0

您可以像微软一样使用递归来解释:link

+0

这是如何不同于我这样做,我只是使用try和catch块在我的前卫是失败,我已经尝试了多种方式来处理catch部分,但仍然失败,并且不会忽略一个失败。 – JPhillips

+0

如果在遍历它们之前获取目录,而尝试getDirectories调用时,捕获不会影响foreach并跳出它 –

0

我对这个异常(UnauthorizedAccessException)相同的问题(ResourceContext.GetForCurrentView call exception),而这个链接给出了一个答案,之所以出现这种情况:

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

短报价:

...其中的关键是您尝试读取的一些文件夹可能会b配置为使当前用户不能访问它们。 而不是忽略限制访问权限的文件夹, 方法会抛出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) { } 
} 
相关问题