文件遍历是一个比较常用的功能,VC++中文件遍历一般使用CFileFind类,该类封装的接口是比较好用的,但用多了 之后,你会发现写了很多重复的代码,比如判断IsDot啊,判断FindNext的返回值啊等等,另外对于碰到目录的情况,还需要递归 遍历,这也会写一些重复的代码。设计模式中有一种叫Iterator,我们就在这篇文章中用Iterator模式对文件遍历进行封装。
接口:我们打算实现以下几个共有接口:
//初始化遍历变量 bool begin(string directory);
//移动到下一个文件 bool next();
//当前的文件的全路径名 string file_all_path_name();
//当前路径名 string file_name();
工作原理:该类的工作原理是比较简单的,核心功能是CFileFind实现了的,首先由begin函数初始化所有变量,并查找第一层目录,由next函数顺序移动文件的访问位置,对应CFileFind的FindNext函数,当一个目录遍历完毕,由next_directory移动到下一个目录,继续遍历。
使用方法: 有了CTHDDFileIterator后,遍历目录就相对简单了很多,下面是使用时候的代码,只要简单的几行,如下:
CTHDDFileIterator iter;
if(iter.begin(_T("C://test"))){//遍历C:/test目录
while (iter.next()){
m_lstFiles.AddString(iter.file_name().c_str());
}
}
更多文章可参考http://www.thirddata.com/