2012-01-08 64 views
11

是否可以使用Windows API函数FindFirstFile来同时搜索多个文件类型,例如*.txt*.docFindFirstFile多种文件类型

我试图用'\0'分离模式,但它不起作用 - 它只搜索第一个模式(我猜,那是因为它认为'\0'是字符串的结尾)。

当然,我可以叫FindFirstFile*.*图案,然后检查我的图案或称它为每个模式,但我不喜欢这个主意 - 我将只使用它,如果有没有其他的解决方案。

+0

据我所知,你不能指定多个通配符。你将不得不使用'*'来过滤自己。 – 2012-01-08 20:52:18

回答

15

这不支持。用不同的通配符运行两次。或者使用*.*并过滤结果。这肯定是更好的选择,通配符由于支持传统的MS-DOS 8.3文件名而不明确。例如* .doc这样的通配符会找到.doc和.docx文件。像longfilename.docx这样的文件名也会创建一个名称为LONGFI~1.DOC

5

MSDN docs没有提及任何关于允许多种搜索模式的FindFirstFile,因此它不存在。

在这种情况下,你最好的办法是使用扫描公开选拔(如C:\\some directory\**),然后根据WIN32_FIND_DATAcFileName成员过滤,使用strrchr(或相应的Unicode变体)找到扩展。对于构成文件扩展名的一小组字符,它应该运行得非常快。

如果您知道所有的扩展名都是3个字符,您应该能够将其屏蔽为*.???以加快速度。

+0

性能问题不是需要多长时间才能过滤文件名,因为这需要在某处完成。这是你一次又一次地敲击API函数的事实。但是,FindNextFile在我的经验中表现得非常好,所以我怀疑这是一个问题。 – 2012-01-08 20:57:53