从目录中获取文件数,而不在 C# 中枚举文件

Moh*_*ary 3 c# directory file

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

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

小智 6

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

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

/sf/answers/1242959161/

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

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


S.L*_*.L. -2

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

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

int allfilesCount = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length;
Run Code Online (Sandbox Code Playgroud)

MSDN 目录信息

也许你可以尝试

Directory.EnumerateFiles().Count() 
Run Code Online (Sandbox Code Playgroud)

如果它更快的话。