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;}}
}注:这个函数是对照参考资料写的,没有经过实际验证,如果出错请自行修改。

排序

另一个问题是如果我们的文件是按照序号排列的,比如1.bmp, 2.bmp, ..., 10.bmp, ... 100.bmp, 当遍历完之后,发现结果会是这样:1.bmp, 10.bmp, 100.bmp, 2.bmp ... 9.bmp。因此我们需要给查找到的文件排个序。想法也很简单,如果你的文件名像上面给的例子一样命名,那我们只要把文件中.bmp之前的内容转化成数字再排个序就好了。代码如下:

#include <algorithm>
#include <vector>bool SortbyNumASC(const CString& x, const CString& y)
{int nLeft, nRight;nLeft = atoi(x.Left(x.ReverseFind('.')));nRight = atoi(y.Left(y.ReverseFind('.')));return nLeft < nRight;
}// 加入文件到fileList中
CFileFind finder;
std::vector<CString> fileList;BOOL bHaveFiles = finder.FindFile("*.*");
while (bHaveFiles)
{bHaveFiles = finder.FindNextFile();fileList.push_back(finder.GetFileName());
}// 由小到大排
sort(fileList.begin(), fileList.end(), SortbyNumASC);

在我的问题中,文件命名方式如下: CS0001G_A_15.bmp, 因此这里把第二个_后面的字符串中的数字转化为int型数据即可,因此这里对上述代码修改如下:


bool SortbynumASC(const CString& x, const CString& y)
{int nLeft = 0;int nRight = 0;nLeft = atoi(x.Right(x.GetLength()-1 - x.ReverseFind('_')));nRight = atoi(y.Right(y.GetLength() - 1 - y.ReverseFind('_')));return nLeft < nRight;
}
//其他部分参考上面代码

参考资料

[1.] https://blog.csdn.net/flyfish1986/article/details/5372427
[2.] https://blog.csdn.net/yal179/article/details/32123557

mfc遍历指定文件夹下的所有文件并排序相关推荐

  1. C#遍历得到指定文件夹下的所有文件和子文件夹

    1.遍历指定文件夹下的所有文件 string path = Application.StartupPath + "\\data\\采集数据\\"; DirectoryInfo ro ...

  2. python遍历指定文件夹的所有文件_python 统计指定文件夹下所有的文件数量,BFS方式...

    python 统计指定文件夹下所有的文件数量 本来一直是有这个需求,只是以前写的是递归的方式处理,感觉对资源的占用不友好,而且python的最大递归深度不超过1000,所以改了一下,这里用广度优先遍历 ...

  3. 遍历读取文件夹下的所有文件

    遍历读取文件夹下的所有文件 例如,读取文件夹下,子文件夹的所有的jpg文件: import glob path = "./database/20230302/night/*/*.jpg&qu ...

  4. c语言 遍历文件夹中所有文件名,C# 遍历文件夹下所有子文件夹中的文件,得到文件名...

    假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中 using System.Data; using System.Drawing; using System.Linq; using ...

  5. python选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱(通过163邮箱)

    工作中需要将自动生成的表格发送给办公邮箱继续处理,结合遍历文件夹和自动发邮件,做出了可以选择文件夹,并自动发送这个文件夹下的所有文件(以附件的形式)至指定邮箱 import smtplib from ...

  6. python批量生成文件夹_python实现批量获取指定文件夹下的所有文件的厂

    本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import ...

  7. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  8. 利用python批量查询企业信息_python实现批量获取指定文件夹下的所有文件的厂商信息...

    本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import ...

  9. C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中的方法

    原文地址:http://www.biye5u.com/article/Csharp/fileprog/2011/4198.html 本文给出了一个在C#中拷贝指定文件夹下的所有文件夹目录到指定文件夹中 ...

  10. C/C++遍历Windows文件夹下的所有文件

    因为文件夹中往往包含文件和文件夹.想要遍历所有的文件,必须遍历文件夹中所有的文件夹.很显然,这个描述满足递归的两个要素:(1)问题的规模在不断的缩小,且新问题的模式与旧问题相同.很显然文件夹中含有子文 ...

最新文章

  1. iOS_25彩票_幸运转盘
  2. linux安全问答(1)
  3. wxPython:Python首选的GUI库 | CSDN博文精选
  4. 同步方法和同步代码块
  5. 【明星自动大变脸】最新StarGAN对抗生成网络实现多领域图像变换(附代码)
  6. Python之pyecharts:利用pyecharts(十五种风格)绘制2018年~2020年中国互联网Top巨头近三年市值(美元)柱状图
  7. XML-RPC远程方法调用
  8. 最短路径 - 迪杰斯特拉(Dijkstra)算法
  9. Linux Kernel TCP/IP Stack|Linux网络硬核系列
  10. 寻找公共链表起始位置
  11. 迟到的 cocoapod 版本适配 之网利宝
  12. STM32工作笔记0094---音乐播放器实验
  13. 【CentOS 7笔记43】,防火墙和iptables filter表#
  14. hiberntate教程笔记6
  15. 中鸣机器人走黑线_乐高机器人三光感走黑线
  16. VSS2005源代码管理
  17. 汉字显示原理 GB2312 编码
  18. android仿微信图片编辑库,Android仿微信朋友圈添加图片
  19. 虚拟机安装win10 x64系统
  20. iOS12适配适配iPhone XR/iPhone XS Max

热门文章

  1. 排序,求最大值最小值
  2. 【转】Canny 算法
  3. 前端-CSS-10-定位
  4. yii的pathinfo方式实现
  5. 数据结构图文解析之:二分查找及与其相关的几个问题解析
  6. 由一个LED闪烁问题发现的MTK的LED driver中存在的问题
  7. JavaScript页面跳转常用代码(转)
  8. uploadify一次上传多个图片:效果展示
  9. Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
  10. 数据库基本----SQL语句大全(转载)