FindFirstFile Несколько типов файлов - PullRequest
13 голосов
/ 09 января 2012

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

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

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

Ответы [ 2 ]

17 голосов
/ 09 января 2012

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

5 голосов
/ 09 января 2012

В документах MSDN ничего не говорится о FindFirstFile, допускающем несколько шаблонов поиска, следовательно, он не существует.

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

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

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