【发布时间】:2016-05-25 15:22:10
【问题描述】:
大家好,我目前通过此调用获得了我想要的子目录:
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+found 的文件夹。我尝试使用 try 和 catch 来处理异常,所以我可以继续检查我实际上并不关心这个文件夹并且我试图忽略它但我不知道如何从我的 get 目录搜索中忽略它想法?我已经尝试使用 .where 进行过滤,以忽略包含文件夹名称的任何文件夹,但这不起作用,它只是在文件夹名称处停止了我的程序。
【问题讨论】:
-
这个问题已经回答了,看下面:link
-
这是用于获取文件,但我需要目录而不是文件
-
您是否尝试过使用
Directory.EnumerateDirectories()?它提供了更多的灵活性,并允许您至少在找到目录时获取它们的名称。不幸的是,像lost+found这样的隐藏系统目录会导致UnauthorizedAccessException。确保使用默认的SearchOption,这样搜索就不会自动尝试进入任何子目录。 -
程序在此之前失败,当:'code'subDirectories = dir.GetDirectories();'code'
标签: c# unauthorizedaccessexcepti getdirectories