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 символа, вы должны скрыть его как *.???
, чтобы ускорить процесс.