4

我正在尝试遍历“c:\Users”中 Windows 中的用户文件夹列表,但不包括 microsoft 内置用户文件夹,以下是我用来完成此壮举的代码段,但出于某种原因没有按预期工作。

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;
}

我不确定为什么这不起作用,任何人都可以为我提供一些见解吗?

4

2 回答 2

6

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

虽然您可以剥离 GetDirectories() 返回的路径的最后一个组成部分,并将其与当前数组中的内容进行比较,但这将导致误报和误报。

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

private readonly List<String> _exclusion = new List<String>
{
    Environment.GetFolderPath(Environment.SpecialFolder.MyMusic),
    // etc.
}
于 2012-04-04T00:46:44.527 回答
2

在您的 lambda 表达式中:'d' 是目录的全名(带有路径),因此实际上不在数组中。

你可以这样做:

public static bool FoundInArray(List<string> arr, string target)
{
    return arr.Any(p => new DirectoryInfo(target).Name == p);
}
于 2012-04-04T00:45:27.977 回答