c#Directory.GetDirectories不包括文件夹

时间:2012-04-04 00:39:44

标签: c# getdirectories system.io.directory

我试图在" c:\ Users"中的窗口中迭代用户文件夹列表。但不包括微软内置的用户文件夹,下面是我用来完成此专长的代码段,但由于某些原因它没有按预期工作。

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:2)

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

你可以这样做:

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