MFC下遍历文件夹下的所有文件,借助于CString类和CFileFind类的便捷,代码如下:
只有一层文件结构
很多时候我们要处理的文件只在一个特定的文件夹下,且该路径下除了待处理的文件之外没有其他文件夹,这时情况比较简单,不需要迭代处理,直接按照下面的操作即可:
CString filepath = _T("/path/to/folder/"); CString filename = _T(""); CString fullname = _T("");
CFileFind find; BOOL IsFind = find.FindFile(filepath + _T("/*.*"));
while (IsFind) { IsFind = find.FindNextFile(); if (find.IsDots()) { continue; } else { filename = find.GetFileName(); fullname = filepath + filename; cout << fullname << endl; } } 多层文件结构
有时候我们处理的文件有多个文件结构,也就是说文件夹下面还有文件夹,这时候需要采用递归的方式遍历。举个例子,比如我们要处理一批后缀名为.bmp的文件,且这些文件在一个根目录下面的很多子目录下,那么我们可以这样处理:
void BroseAllFiles(CString filepath) { //检测路径是否正确并添加必要信息 if (filepath == _T("")) { return; } else { if (filepath.Right(1) != _T("")) { filepath += _T("\\"); } filepath += _T("*.*"); }
//递归枚举文件夹下的内容 CFileFind find; CString strpath; CString str_fileName; CString fullname; BOOL IsFind = find.FindFile(filepath);
while (IsFind) { IsFind = find.FindNextFile(); strpath = find.GetFilePath();
if (find.IsDirectory() && !find.IsDots()) { BroseAllFiles(strpath); } else if (!find.IsDierctory() && !find.IsDots()) { str_fileName = find.GetFileName(); if (str_fileName.Right(3) == _T("bmp")) //如果后缀是bmp文件才处理 { fullname = strpath + str_fileName; cout << fullname << endl; } } else { continue; } } }
注:这个函数是对照参考资料写的,没有经过实际验证,如果出错请自行修改。 --------------------- 作者:new_xuyangcao 来源: 原文:https://blog.csdn.net/xuyangcao123/article/details/81023552 版权声明:本文为博主原创文章,转载请附上博文链接!