c#Directory.GetDirectories不包括文件夹

我试图在“c:\ Users”中迭代窗口中的用户文件夹列表但排除了microsoft内置用户文件夹,下面是我用来完成此专长的代码段但是由于某种原因不按预期工作。

private readonly List _exclusion = new List { "All Users", "Default", "LocalService", "Public", "Administrator", "Default User", "NetworkService" }; public static bool FoundInArray(List 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; } 

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

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

你可以这样做:

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

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

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

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

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