这个我一直都很想做了,前两天开始准备,查找了一下CFindFile的资料,然后把思路理清楚,就直接开始做了。

文件系统是一个操作系统以一部分,所以想文件操作,基本上就要依赖于操作系统提供的接口函数。

在这我是直接用windows中对文件查找专门做好了的一个类来实现文件的遍历。

其实一个文件目录就是一个树,每一层目录都有很多的子目录和文件,当成节点就好了。

在使用CFindFile遍历的时候,需要先调用FindFile函数,再调用FindNextFile函数来遍历当前这一级的目录。

我为了输出方便使用了控制台工程,在这里需要提示一点:

由于windows程序设计中默认使用unicode编码,所以在使用控制台程序输出的时候,需要使用wcout来进行输出。

而使用wcout进行输出的时候,如果遇到了汉字,则会导致程序卡住,然后停止运行的情况。

解决方法是添加下面的函数调用:

setlocale(LC_ALL, "chs");

这个函数是我在网上查到的,我遇到这个问题就是因为在遍历C盘目录的时候由于汉字的出现卡死,发现一个文件名只输出了前面的数字和英文部分,而汉字没输出。

先展示下我做的成果:

最后运行结束:

效果还可以吧?所有的目录应该都列出来了。

下面看一下函数:

 1 void TraversFile(CString csPath)
 2 {
 3     CString csPrePath = csPath;
 4     CString csNextPath = csPath;
 5     CFileFind ff;
 6     csPath += _T("*.*");//遍历这一级全部的目录
 7     int nResult = ff.FindFile(csPath);
 8     while(nResult)
 9     {
10         nResult = ff.FindNextFileW();
11         if(ff.IsDirectory() && !ff.IsDots())
12         {
13             wcout << (LPCTSTR)ff.GetFilePath() << endl;
14             csNextPath += ff.GetFileName();
15             csNextPath += _T("\\");
16             TraversFile(csNextPath);
17         }
18         csNextPath = csPrePath;
19     }
20 }

这里主要采用的方法是递归调用,我觉得这种方式相对较简单,且代码段比较少可以看到,这个函数一共才20行,而且层次很清晰。

我觉得主要需要讲的就是那个if判断,因为在那块是需要注意的两个地方。

IsDirectory函数用来判断当前选中的这个文件是一个文件还是一个目录。所谓目录,其实就是文件夹啦~

如果是文件夹的话,就输出路径,然后整合文件夹的路径,传给递归调用函数,来遍历当前这个文件夹下的文件。

最开始这个这个函数的参数是某个子目录,比如我遍历的F盘,传入的参数就是:F:\\

传入这个参数之后,会在其后面添加*.*,FindFile函数在这个时候就开始查找当前目录的全部的文件和文件夹了。

基本上啊,就是一个树的深度优先遍历。

主函数的代码非常简单,但是能很好的完成功能:

 1 using namespace std;
 2 /*修改于20130625 做文件查找*/
 3 int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 4 {
 5     setlocale(LC_ALL, "chs");
 6     CString cs = _T("F:\\");
 7     TraversFile(cs);
 8     system("pause");
 9     return 0;
10 }

还不错吧?

转载于:https://www.cnblogs.com/matrix-r/p/3155111.html

windows下的文件遍历(使用CFindFile)相关推荐

  1. 服务器下最大能容量多少文件,windows下一个文件夹下面最多可以放多少文件(ntfs格式略过)...

    那么怎么来测试这样一个问题呢,很显然我们一个个的去建立文件是不现实的,没那么多时间,而且这个方法也太笨了.这里我们会用到批处理命令,新建一个bat文件,然后将"for /l %%a in ( ...

  2. 将Windows下的文件同步到Linux下

    需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...

  3. Linux和Windows下计算文件的Hash值

    Linux和Windows下计算文件的Hash值 MD和SHA简介 MD SHA MD5 SHA1标识文件唯一性 Linux Windows 不需要下载工具,也不需要写代码. MD和SHA简介 MD ...

  4. 如何将Windows下的文件传到Linux中

    将Windows下的文件传到Linux,这里有一款叫做WinSCP的软件,感觉很好用,能直接拖拉过去的. 先给出它的官方链接https://winscp.net/eng/download.php 下载 ...

  5. Windows 下的文件被占用问题解决

    Windows 下的文件被占用问题解决 参考文章: (1)Windows 下的文件被占用问题解决 (2)https://www.cnblogs.com/lmsthoughts/p/8085931.ht ...

  6. windows下将文件压缩成.tar.gz格式

    windows下将文件压缩成.tar.gz格式 最简单的方法,用7-ZIP压缩两次即可.第一次压缩成tar格式,第二次再将第一次的压缩的.tar文件再次用7-ZIP压缩成gzip格式,最终得到的文件就 ...

  7. Windows下dump文件的生成

    Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump.内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump.用户模式Dump进一步可 ...

  8. 【SCP命令】Linux和Windows下的文件互传

    scp就是secure copy,是用来远程拷贝文件的命令. linux和windows之间互传,都需要进入windows的cmd命令行中执行. 从Windows上传文件到Linux scp -P S ...

  9. 在Linux和Windows下删除文件夹中包含的.svn文件的方法

    为什么80%的码农都做不了架构师?>>>    一.在linux下 删除这些目录是很简单的,命令如下 find . -type d -name ".svn"|xa ...

最新文章

  1. 每一个科学家的内心都住着一位哲学家(节选)
  2. linux命令tree
  3. MVC中某个页面不需要引用母版页的正确写法
  4. python编写代码实现文件的拷贝功能_python利用os模块编写文件复制功能——copy()函数用法...
  5. linux定时任务cron配置
  6. web服务-Axis2的安装
  7. 【建站指南】网站搭建需要准备什么?
  8. 计算机论文鉴定表指导教师评语,毕业论文指导老师评语|毕业论文鉴定表评语...
  9. 淘宝直通车新功能智能推广 智能推广计划设置 智能推广优化 智能推广优化原则
  10. 技术管理进阶——团队合并、解散怎么办?
  11. 2021年量子计算机奖,2021美国科学天才奖出炉:高中生瓜分180万奖金
  12. 大规模定制家具实施ERP的必要性
  13. 作为程序员,我将如何教育自己的孩子
  14. 推荐引擎 - Summary Analysis
  15. 【新人入门】HTML——前端纯小白新手入门
  16. 计算机网考统考机考试操作题,计算机统考操作题常考题型
  17. 计算机网络毕业论文搭建服务,网络搭建毕业论文
  18. 毕业设计-基于机器学习的软件漏洞挖掘方法
  19. 【资料转发分享】基于8086和LCD12864液晶显示仿真设计、基于8086计算器系统仿真设计、基于8086家具房间灯光控制设计-设计资料
  20. 突破数据极限:计算24的阶乘和n的m次方。

热门文章

  1. 常见图片格式与调色算法
  2. Unity3D基础37:Input控制面板
  3. bzoj 3436: 小K的农场(差分约束)
  4. matlab2c使用c++实现matlab函数系列教程-rank函数
  5. 基于Struts2框架的超市人事工资管理系统
  6. centos安装GNOME打开emacs
  7. [UOJ22]外星人
  8. JSP 语法2 都在百分号里面: 5.@符号加JSP三种指令标签 6
  9. pthread_key_t和pthread_key_create()详解
  10. 《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用