我使用Directory.EnumerateFiles()
和Directory.GetFiles()
来获取c#中特定目录中的文件数。问题是这些方法很慢,因为它们枚举文件以计算数量。
如何获取目录中的文件数而不枚举c#中的文件?
答案 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;
Mybe你可以尝试
Directory.EnumerateFiles().Count()
如果它更快。
答案 3 :(得分:-2)
嗨,也许这有助于它返回字符串[]
String[] files = Directory.GetFileSystemEntries("path");