从目录中获取文件计数,而不枚举c#中的文件

本文关键字:文件 枚举 获取 | 更新日期: 2023-09-27 18:17:29

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

如何在c#中获得目录中没有枚举文件的文件计数?

从目录中获取文件计数,而不枚举c#中的文件

必须遍历文件夹以获得所有文件。

但是,您仍然可以做一些事情来提高性能。我建议您看一下这些基准测试(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();
}

我实际上从未尝试过更快的方法,但这是一个好问题…通过搜索,我找到了这个

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

基准比较看起来相当不错…

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

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

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

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

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

MSDN DirectoryInfo

也许你可以试试

Directory.EnumerateFiles().Count()