【问题标题】:c# Directory.GetDirectories excluding foldersc# Directory.GetDirectories 不包括文件夹
【发布时间】:2012-04-04 00:39:43
【问题描述】:

我正在尝试遍历“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;
}

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

【问题讨论】:

  • 使用调试器并放置断点。然后遍历查看变量的源代码。告诉我们哪个部分没有按预期工作,您会得到什么结果。

标签: c# getdirectories system.io.directory


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    你可以这样做:

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

    【讨论】:

    • 你知道我将如何从中返回 DirectoryInfo d.Name 吗?
    • 检查字符串上的“包含”匹配会在某些极端情况下产生错误的结果。
    • 只是一个例子:C:\Users\EricJ\DefaultXYZ 也被包含检查删除。
    • 哦,我明白了,感谢您指出这一点。那么使用目录信息名称是最安全的。已编辑。
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多