2012-01-08 65 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