Какой самый быстрый способ найти файл в дереве каталогов - PullRequest
1 голос
/ 23 сентября 2011

У меня есть дерево каталогов, подобное приведенному ниже.Всего в нем содержится около 30 000 файлов.

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

Какой самый быстрый способ найти файл из структуры каталогов, такой как приведенный выше, по его имени с использованием C ++ в Windows?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Если у вас есть Windows Desktop Search или Windows Search , работающий (или целевой компьютер может иметь его в любом случае), вы можете использовать ISearchFolderItemFactory (или ISearchDesktop для WDS), чтобы он выполнял поиск для вас.

Если не существует ранее существовавшего индекса, практически единственный способ сделать это с помощью FirstFirstFile, FindnextFile и FindClose. Обычно я рекомендую против очевидного рекурсивного метода поиска - поиск в ширину обычно, по крайней мере, так же быстр, и в зависимости от ситуации, может легко быть в два раза быстрее.

Чтобы выполнить поиск в ширину, вы поддерживаете коллекцию (я обычно использую очередь с приоритетами, но нормальная очередь, стек и т. Д., Также будут работать) подкаталогов, которые вы еще не искали. Вы начинаете поиск, вводя начальный каталог в коллекцию, а затем выполняете свою функцию поиска. Ваш поиск выполняется в цикле, продолжая поиск, пока коллекция не станет пустой. Когда он встречает каталог, он добавляет его в коллекцию.

2 голосов
/ 23 сентября 2011

Возможно, не тот ответ, который вы ищете, но индекс доступных файлов в файловой системе, оптимизированный для шаблонов поиска, которые вы поддерживаете, был бы самым быстрым.

Если вы используете какой-то API для этого, это просто зависит от того, насколько хорошо вы пишете код, профилируете и улучшаете его. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...