C#Directory.GetDirectories文件夹除外(c# Directory.GetDi

2019-09-16 07:51发布

我试图通过用户的文件夹列表窗口中的迭代在“C:\用户”,但排除微软内置的用户文件夹,下面是我用来完成这一壮举的代码段,但它是出于某种原因无法按照预期工作。

private readonly List<String> _exclusion = new List<String>
                                                   {
                                                       "All Users",
                                                       "Default",
                                                       "LocalService",
                                                       "Public",
                                                       "Administrator",
                                                       "Default User",
                                                       "NetworkService"
                                                   };

public static bool FoundInArray(List<string> arr, string target)
{
    return arr.Exists(p => p.Trim() == target);
}

foreach (string d in Directory.GetDirectories(sDir).Where(d => !FoundInArray(_exclusion,d)))
{
    richTextBox1.Text += d + Environment.Newline;
}

我不知道为什么,这是行不通的,任何人都可以给我提供一些这方面的见解?

Answer 1:

在您的lambda表达式:“d”是目录(与路径)的全名,所以实际上不是在数组中。

你可以这样做:

public static bool FoundInArray(List<string> arr, string target)
{
    return arr.Any(p => new DirectoryInfo(target).Name == p);
}


Answer 2:

Directory.GetDirectories()返回目录的完整路径,而不仅仅是目录的最后一部分。

虽然你可以脱掉()由GetDirectories返回的路径的最后一个组件和比较,为当前什么是你的阵中,这将导致假阳性和假阴性。

相反,使用Environment.SpecialFolders获得路径特定于当前用户和操作系统版本一个给定的特殊的文件夹。

private readonly List<String> _exclusion = new List<String>
{
    Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
    // etc.
}


文章来源: c# Directory.GetDirectories excluding folders