FindFirstFile Несколько типов файлов

Можно ли использовать функцию Windows API FindFirstFile для одновременного поиска нескольких типов файлов, например *.txt и *.doc?

Я попытался отделить шаблоны с помощью '\0', но он не работает - он ищет только первый шаблон (я думаю, это потому, что он считает, что '\0' - это конец строки).

Конечно, я могу вызвать FindFirstFile с шаблоном *.*, а затем проверить мои шаблоны или вызвать его для каждого шаблона, но мне не нравится эта идея - я буду использовать его только в том случае, если нет других решений.

Ответ 1

Это не поддерживается. Запустите его дважды с помощью различных подстановочных знаков. Или используйте *.* и отфильтруйте результат. Это, безусловно, лучший выбор, подстановочные знаки неоднозначны в любом случае из-за поддержки устаревших имен файлов MS-DOS 8.3. Например, подстановочный знак, например *.doc, найдет файлы .doc и .docx. Имя файла, подобное longfilename.docx, также создает запись с именем LONGFI~1.DOC

Ответ 2

MSDN docs ничего не упоминает о FindFirstFile, позволяющем использовать несколько шаблонов поиска, поэтому его не существует.

В этом случае лучше всего сканировать, используя открытый выбор (например, C:\\some directory\* или *), а затем фильтровать на основе члена WIN32_FIND_DATA cFileName, используя strrchr (или соответствующий вариант Unicode), чтобы найти расширение. Он должен работать довольно быстро для небольшого набора символов, которые составляют расширение файла.

Если вы знаете, что все расширения имеют 3 символа, вы должны скрыть его как *.???, чтобы ускорить процесс.