是否可以使用Windows API函数FindFirstFile
来同时搜索多个文件类型,例如*.txt
和*.doc
?FindFirstFile多种文件类型
我试图用'\0'
分离模式,但它不起作用 - 它只搜索第一个模式(我猜,那是因为它认为'\0'
是字符串的结尾)。
当然,我可以叫FindFirstFile
与*.*
图案,然后检查我的图案或称它为每个模式,但我不喜欢这个主意 - 我将只使用它,如果有没有其他的解决方案。
是否可以使用Windows API函数FindFirstFile
来同时搜索多个文件类型,例如*.txt
和*.doc
?FindFirstFile多种文件类型
我试图用'\0'
分离模式,但它不起作用 - 它只搜索第一个模式(我猜,那是因为它认为'\0'
是字符串的结尾)。
当然,我可以叫FindFirstFile
与*.*
图案,然后检查我的图案或称它为每个模式,但我不喜欢这个主意 - 我将只使用它,如果有没有其他的解决方案。
这不支持。用不同的通配符运行两次。或者使用*.*
并过滤结果。这肯定是更好的选择,通配符由于支持传统的MS-DOS 8.3文件名而不明确。例如* .doc这样的通配符会找到.doc和.docx文件。像longfilename.docx
这样的文件名也会创建一个名称为LONGFI~1.DOC
MSDN docs没有提及任何关于允许多种搜索模式的FindFirstFile
,因此它不存在。
在这种情况下,你最好的办法是使用扫描公开选拔(如C:\\some directory\*
或*
),然后根据WIN32_FIND_DATA
的cFileName
成员过滤,使用strrchr
(或相应的Unicode变体)找到扩展。对于构成文件扩展名的一小组字符,它应该运行得非常快。
如果您知道所有的扩展名都是3个字符,您应该能够将其屏蔽为*.???
以加快速度。
性能问题不是需要多长时间才能过滤文件名,因为这需要在某处完成。这是你一次又一次地敲击API函数的事实。但是,FindNextFile在我的经验中表现得非常好,所以我怀疑这是一个问题。 – 2012-01-08 20:57:53
据我所知,你不能指定多个通配符。你将不得不使用'*'来过滤自己。 – 2012-01-08 20:52:18