当前位置:  开发笔记 > 编程语言 > 正文

在所有子目录中查找具有特定扩展名的文件数

如何解决《在所有子目录中查找具有特定扩展名的文件数》经验,为你挑选了4个好方法。

有没有办法找到特定类型的文件数,而无需在Directory.GetFiles()或类似方法中循环遍历所有结果?我正在寻找这样的东西:

int ComponentCount = MagicFindFileCount(@"c:\windows\system32", "*.dll");

我知道我可以创建一个递归函数来调用Directory.GetFiles,但是如果我能在没有所有迭代的情况下做到这一点会更加清晰.

编辑:如果没有递归和迭代自己不可能做到这一点,那么最好的方法是什么?



1> Jon Limjap..:

您应该使用Directory.GetFiles()的Directory.GetFiles(path,searchPattern,SearchOption)重载.

Path指定路径,searchPattern指定通配符(例如,*,*.format),SearchOption提供包含子目录的选项.

此搜索的返回数组的Length属性将为您的特定搜索模式和选项提供正确的文件计数:

string[] files = directory.GetFiles(@"c:\windows\system32", "*.dll", SearchOption.AllDirectories);

return files.Length;

编辑:或者您可以使用Directory.EnumerateFiles方法

return Directory.EnumerateFiles(@"c:\windows\system32", "*.dll", SearchOption.AllDirectories).Count();


@DavidHAust原因是[`GetFiles`方法](http://msdn.microsoft.com/en-us/library/07wt70x2.aspx)将实现目录中*整个*文件列表.现在调用的首选方法是[`Directory.EnumerateFiles`](http://msdn.microsoft.com/en-us/library/dd383571.aspx),因为它将流回文件(通过`yield`-like机制)因为对OS的底层调用会产生结果.

2> Dean..:

最简单的方法是使用linq:

var fileCount = (from file in Directory.EnumerateFiles(@"H:\iPod_Control\Music", "*.mp3", SearchOption.AllDirectories)
                    select file).Count();


为什么不`Directory.EnumerateFiles(@"H:\ iPod_Control\Music","*.mp3",SearchOption.AllDirectories).Count()`

3> jfs..:

您可以使用GetFiles的这个重载:

Directory.GetFiles方法(String,String,SearchOption)

和SearchOption的这个成员:

AllDirectories - 包括搜索操作中的当前目录和所有子目录.此选项包括重新分析点,如安装的驱动器和搜索中的符号链接.

GetFiles返回一个字符串数组,因此您只需获取Length,即找到的文件数.



4> Sauleil..:

我一直在寻找更优化的版本.由于我还没有找到它,我决定编码并在此处分享:

    public static int GetFileCount(string path, string searchPattern, SearchOption searchOption)
    {
        var fileCount = 0;
        var fileIter = Directory.EnumerateFiles(path, searchPattern, searchOption);
        foreach (var file in fileIter)
            fileCount++;
        return fileCount;
    }

使用GetFiles/GetDirectories的所有解决方案都很慢,因为需要创建所有这些对象.使用枚举,它不会创建任何临时对象(FileInfo/DirectoryInfo).

有关更多信息,请参阅备注http://msdn.microsoft.com/en-us/library/dd383571.aspx

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有