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

C# 获取目录中的文件计数,而不枚举c中的文件#,c#,file,directory,C#,File,Directory,我正在使用Directory.EnumerateFiles()和Directory.GetFiles()获取c#中特定目录中的文件数。问题是这些方法很慢,因为它们枚举文件以达到目的 如何在不枚举c#中的文件的情况下获取目录中的文件数?我认为您必须使用Directory.GetFiles()或DirectoryInfo类 优点是,您可以使用GetFIles重载来搜索子目录中的文件,例如 int allfilesCount = Directory.GetFiles(path, "*", Search

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


如何在不枚举c#中的文件的情况下获取目录中的文件数?

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

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

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

也许你可以试试

Directory.EnumerateFiles().Count() 

如果它更快。

嗨,这可能有助于它返回字符串[]

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

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

基准比较看起来相当不错


这可能会有所帮助。

您必须通过枚举文件夹来获取所有文件

但是,您仍然可以做一些事情来提高性能。我建议您看看这些基准测试(Get1方法):

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

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

简短回答:没有。即使您获得了一些API来执行此操作,它也会在内部枚举。但是,如果目录包含大量文件(超过50000个),则需要花费太多时间。这是不可能的我已经使用FastDirectoryEnumerator类很多次了,它比所有内置的枚举方法都快得可笑。它通过避免大型预分配、缓存中间结果和并行运行任务来实现这一点。强烈推荐!我是在做一些奇怪的事情,还是这没有在baseDir中搜索文件?啊,这是因为它正在枚举目录,但不搜索自身。