作者EdisonX (卡卡兽)
看板Programming
标题Fw: [问题] 资料夹穷举档案 Filter
时间Thu Dec 19 00:20:15 2013
※ [本文转录自 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
1F:推 chinoyan:看MSDN 114.47.48.63 12/19 05:42
2F:→ EdisonX:嗯,我查过 MSDN 没头绪才追问的 @@ 180.177.74.188 12/19 22:33