首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectoryInfo.GetDirectories()和属性

DirectoryInfo.GetDirectories()和属性
EN

Stack Overflow用户
提问于 2008-09-19 09:26:39
回答 4查看 6.6K关注 0票数 6

我递归地使用DirectoryInfo.GetDirectories()来查找给定路径下的所有子目录。但是,我想排除系统文件夹,并且没有明确的方法。在FindFirstFile/FindNextFile中,属性更加清晰。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-19 09:51:44

@rslite是对的,.NET没有提供这种开箱即用的过滤,但它并不难实现:

代码语言:javascript
复制
static IEnumerable<string> GetNonSystemDirs(string path)
{
    var dirs = from d in Directory.GetDirectories(path)
               let inf = new DirectoryInfo(d)
               where (inf.Attributes & FileAttributes.System) == 0
               select d;

    foreach (var dir in dirs)
    {
        yield return dir;
        foreach (var subDir in GetNonSystemDirs(dir))
        {
            yield return subDir;
        }
    }
}

MSDN链接:

FileSystemInfo.Attributes Property

FileAttributes Enumeration

票数 8
EN

Stack Overflow用户

发布于 2008-09-19 10:07:49

这是一个很好的场景示例,在这种场景中,Linq和扩展方法让事情变得非常干净和简单。

代码语言:javascript
复制
public static DirectoryInfo[] GetNonSystemDirectories(
    this DirectoryInfo directory,
    string searchPattern,
    SearchOption searchOption)
{
    return directory.GetDirectories(searchPattern, searchOption)
        .Where(subDir => (subDir.Attributes & FileAttributes.System) == 0)
        .ToArray();
}

如果您正在构建一个.net v2应用程序,那么您可以使用LinqBridge来访问所有很酷的Linq to objects方法(比如上面的Where()和ToArray() )。

编辑

在.net v4中,您应该使用EnumerateDirectories而不是GetDirectories,这允许您迭代结果,而无需首先在内存中构建数组。

代码语言:javascript
复制
public static IEnumerable<DirectoryInfo> EnumerateNonSystemDirectories(
    this DirectoryInfo directory,
    string searchPattern,
    SearchOption searchOption)
{
    return directory.EnumerateDirectories(searchPattern, searchOption)
        .Where(subDir => (subDir.Attributes & FileAttributes.System) == 0);
}
票数 3
EN

Stack Overflow用户

发布于 2008-09-19 09:37:33

您可能必须遍历结果并拒绝那些具有不需要的属性的结果(使用attributes属性)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/100721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档