Fw: [问题] 资料夹穷举档案 Filter

楼主: EdisonX (卡卡兽)   2013-12-19 00:20:15
※ [本文转录自 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 ?
谢谢各位不吝指教,小弟感激不尽。

Links booklink

Contact Us: admin [ a t ] ucptt.com