在目录树中查找文件的最快方法是什么

时间:2011-09-23 16:09:44

标签: c++ windows search

我有一个类似于下面的目录树。它总共包含大约30,000个文件。

rootDir
rootDir\subDir1
rootDir\subDir1\subSubDir1
rootDir\subDir1\subSubDir2
rootDir\subDir2
rootDir\subDir2\subSubDir1
rootDir\subDir3
...
rootDir\subDirN

在Windows上使用C ++根据名称从目录结构中找到文件的最快方法是什么?

2 个答案:

答案 0 :(得分:3)

如果您确实有Windows Desktop SearchWindows Search操作(或目标计算机可能拥有它),您可以使用ISearchFolderItemFactory(或{{ 3}},对于WDS来让它搜索你。

如果没有预先存在的索引,几乎唯一的方法就是使用ISearchDesktopFirstFirstFileFindnextFile。我通常建议使用反对进行搜索的明显递归方法 - 广度优先搜索通常至少同样快,并且根据情况,可以轻松地快两倍。

要进行广度优先搜索,您要维护一个尚未搜索的子目录的集合(我通常使用优先级队列,但正常的队列,堆栈等也可以)。您可以通过在集合中输入起始目录开始搜索,然后让您的搜索功能执行此操作。您的搜索在循环中运行,继续搜索直到集合为空。遇到目录时,会将其添加到集合中。

答案 1 :(得分:2)

也许不是您正在寻找的答案,但在文件系统中为您支持的搜索模式优化的可用文件索引将是最快的。

如果您使用某些API来执行此操作,则仅取决于您编写代码,配置文件和改进代码的程度。 :)