Fw: [問題] 資料夾窮舉檔案 Filter

看板Programming作者 (卡卡獸)時間11年前 (2013/12/19 00:20), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板 #1IiSeYoJ ] 作者: EdisonX (卡卡獸) 看板: C_and_CPP 標題: [問題] 資料夾窮舉檔案 Filter 時間: Thu Dec 19 00:15:26 2013 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 測過 VC6.0 / vc2010 問題(Question): 目前是用 FindFirstFile / FindNextFile 這組 API ,想完成 cmd.exe 以下這件事 cd /d D:\Data dir *.h *.cpp /s /b 但目前測下來似乎沒那麼容易完成,所以想說先階段式完成, 關鍵目前看來是 FindFirstFile 第一個參數問題。 HANDLE hFile; WIN32_FIND_DATA tmData; ///< 這種敘述最後什麼都找不到 hFile = FindFirstFile( "D:\\Data\\*.h *.cpp", &tmData); ///< 這種敘述也找不到 chdir("D:\\Data"); hFile = FindFirst("*.h *.cpp", &tmData); 目前我是分兩次去找,一次是去找 D:\Data\*.h,另一次是去找 D:\Data\*.cpp, 之所以不用 FindFirst("*.*") ,掃出來結果再去比對副檔名,原因有二: (1) 遇到 c*.cpp 這種東西我還要自己去處理,懶了。 (2) *.* 的數量可能比 *.cpp *.h 多很多,所以又多了一堆不必要的窮舉。 不知道這情況是不是以這方式為最佳? 最麻煩的是,上述這方式能找到的只能是單層,如果要達到再進入資料夾底下 做所有搜尋的話,我的做法是 (A) FindFirst("D:\\Data\\*.*", &tmData); FindNext 做深層遞迴掃描。 (B) 看 tmData 屬性,如果是資料夾的話放入 queue (C) 深層掃完後,queue 會得到所有資料夾,再對所有資料夾 做 FindFirst("*.c", &tmData), FindFirst("*.h", &tmData); 整個流程下來感覺多做了很多不必要的事,幾個 filter 就掃了幾次。 上述步驟 (A) , 曾想過是否有 APIs 只列舉路徑下的資料夾就行, 這樣應就可以省很多工,但目前我也還沒找到這支 API。 綜合以上說明,問題整理如下 (i) 單層資料夾窮舉 *.h *.cpp (ii) 資料夾深層遞迴窮舉 *.h *.cpp 目前大多是怎做的?還是目前也是 open problem ? 謝謝各位不吝指教,小弟感激不盡。 -- ~ 這輩子與神手無緣 我只好當神獸了 ~ 卡卡獸 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.74.188 ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: EdisonX (180.177.74.188), 時間: 12/19/2013 00:20:15

12/19 05:42, , 1F
看MSDN
12/19 05:42, 1F

12/19 22:33, , 2F
嗯,我查過 MSDN 沒頭緒才追問的 @@
12/19 22:33, 2F
文章代碼(AID): #1IiSj1Fu (Programming)
文章代碼(AID): #1IiSj1Fu (Programming)