尝试将所有文件的计数与给定掩码匹配,但希望避免返回每个匹配甚至列表的费用,因为可能存在数万个匹配。
我可以反复做FindNextFile
直到完成,但这是很多昂贵的往返行程。
这是否有便利功能?
这是现在使用的代码,因为我需要的只是计数,寻找成本较低的方法来实现目标:
string[] files = System.IO.Directory.GetFiles(Path, InFileMask);
if (files.Length == ExpectedCount)
答案 0 :(得分:2)
您应该可以使用Microsoft Indexing Service来实现这一目标。还有another article here。不幸的是,它并不总是在每个系统上都是活跃的,因此并不完全可靠。
更好的选择是实现自己的索引服务。您可以在应用程序启动时扫描整个PC,并依赖FileSystemWatcher来监听系统上的文件更改。通过这种方式,您可以实现非常快速的文件枚举,并且您可以在更短的时间内返回文件计数。
更简单的方法将使用优秀的Faster Directory Enumeration Tool,它还具有可以处理此问题的掩码/过滤器支持。 e.g。
var filesCount = FastDirectoryEnumerator.GetFiles(Path, InFileMask).Length;
答案 1 :(得分:0)
如果这确实是一个问题(需要搜索数万个文件名,并且要完成数千个不同的搜索),那么最简单的(不需要编写大量代码)可能会将文件名缓存在索引数据库表中然后使用SQL进行计数。在将文件名复制到数据库并为表编制索引之后,任何体面的SQL引擎都应该在每次搜索时都做得很好 - 我会自己使用SQLite。
该障碍将使缓存保持最新。多少疼痛将取决于你想要做什么。