无需枚举c#中的文件即可从目录中获取文件数

时间:2014-08-11 09:10:29

标签: c# file directory

我使用Directory.EnumerateFiles()Directory.GetFiles()来获取c#中特定目录中的文件数。问题是这些方法很慢,因为它们枚举文件以计算数量。

如何获取目录中的文件数而不枚举c#中的文件?

4 个答案:

答案 0 :(得分:3)

我实际上从来没有尝试过更快的方式,但这是一个很好的问题。通过搜索,我发现了这个

http://www.codeproject.com/Articles/38959/A-Faster-Directory-Enumerator

基准比较看起来很不错..

MayBe这有帮助..

答案 1 :(得分:2)

必须枚举整个文件夹才能获取所有文件。

但是,您仍然可以采取措施来提高性能。我建议你看看那些基准测试(Get1方法):

https://stackoverflow.com/a/17756559/3876750

根据基准测试,似乎以下方法提供了最佳性能:

private static int Get1(string myBaseDirectory)
{
    DirectoryInfo dirInfo = new DirectoryInfo(myBaseDirectory);
    return dirInfo.EnumerateDirectories()
           .AsParallel()
           .SelectMany(di => di.EnumerateFiles("*.*", SearchOption.AllDirectories))
           .Count();
}

答案 2 :(得分:-2)

我认为您必须使用 Directory.GetFiles() DirectoryInfo 类。

优点是,你可以使用GetFIles的重载来搜索子目录中的文件,例如。

int allfilesCount = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length;

MSDN DirectoryInfo

Mybe你可以尝试

Directory.EnumerateFiles().Count() 

如果它更快。

答案 3 :(得分:-2)

嗨,也许这有助于它返回字符串[]

String[] files = Directory.GetFileSystemEntries("path");