windows下的文件遍历(使用CFindFile)
这个我一直都很想做了,前两天开始准备,查找了一下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)相关推荐
- 服务器下最大能容量多少文件,windows下一个文件夹下面最多可以放多少文件(ntfs格式略过)...
那么怎么来测试这样一个问题呢,很显然我们一个个的去建立文件是不现实的,没那么多时间,而且这个方法也太笨了.这里我们会用到批处理命令,新建一个bat文件,然后将"for /l %%a in ( ...
- 将Windows下的文件同步到Linux下
需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...
- Linux和Windows下计算文件的Hash值
Linux和Windows下计算文件的Hash值 MD和SHA简介 MD SHA MD5 SHA1标识文件唯一性 Linux Windows 不需要下载工具,也不需要写代码. MD和SHA简介 MD ...
- 如何将Windows下的文件传到Linux中
将Windows下的文件传到Linux,这里有一款叫做WinSCP的软件,感觉很好用,能直接拖拉过去的. 先给出它的官方链接https://winscp.net/eng/download.php 下载 ...
- Windows 下的文件被占用问题解决
Windows 下的文件被占用问题解决 参考文章: (1)Windows 下的文件被占用问题解决 (2)https://www.cnblogs.com/lmsthoughts/p/8085931.ht ...
- windows下将文件压缩成.tar.gz格式
windows下将文件压缩成.tar.gz格式 最简单的方法,用7-ZIP压缩两次即可.第一次压缩成tar格式,第二次再将第一次的压缩的.tar文件再次用7-ZIP压缩成gzip格式,最终得到的文件就 ...
- Windows下dump文件的生成
Windows下Dump文件分为两大类,内核模式Dump和用户模式Dump.内核模式Dump是操作系统创建的崩溃转储,最经典的就是系统蓝屏,这时候会自动创建内核模式的Dump.用户模式Dump进一步可 ...
- 【SCP命令】Linux和Windows下的文件互传
scp就是secure copy,是用来远程拷贝文件的命令. linux和windows之间互传,都需要进入windows的cmd命令行中执行. 从Windows上传文件到Linux scp -P S ...
- 在Linux和Windows下删除文件夹中包含的.svn文件的方法
为什么80%的码农都做不了架构师?>>> 一.在linux下 删除这些目录是很简单的,命令如下 find . -type d -name ".svn"|xa ...
最新文章
- 每一个科学家的内心都住着一位哲学家(节选)
- linux命令tree
- MVC中某个页面不需要引用母版页的正确写法
- python编写代码实现文件的拷贝功能_python利用os模块编写文件复制功能——copy()函数用法...
- linux定时任务cron配置
- web服务-Axis2的安装
- 【建站指南】网站搭建需要准备什么?
- 计算机论文鉴定表指导教师评语,毕业论文指导老师评语|毕业论文鉴定表评语...
- 淘宝直通车新功能智能推广 智能推广计划设置 智能推广优化 智能推广优化原则
- 技术管理进阶——团队合并、解散怎么办?
- 2021年量子计算机奖,2021美国科学天才奖出炉:高中生瓜分180万奖金
- 大规模定制家具实施ERP的必要性
- 作为程序员,我将如何教育自己的孩子
- 推荐引擎 - Summary Analysis
- 【新人入门】HTML——前端纯小白新手入门
- 计算机网考统考机考试操作题,计算机统考操作题常考题型
- 计算机网络毕业论文搭建服务,网络搭建毕业论文
- 毕业设计-基于机器学习的软件漏洞挖掘方法
- 【资料转发分享】基于8086和LCD12864液晶显示仿真设计、基于8086计算器系统仿真设计、基于8086家具房间灯光控制设计-设计资料
- 突破数据极限:计算24的阶乘和n的m次方。
热门文章
- 常见图片格式与调色算法
- Unity3D基础37:Input控制面板
- bzoj 3436: 小K的农场(差分约束)
- matlab2c使用c++实现matlab函数系列教程-rank函数
- 基于Struts2框架的超市人事工资管理系统
- centos安装GNOME打开emacs
- [UOJ22]外星人
- JSP 语法2 都在百分号里面: 5.@符号加JSP三种指令标签 6
- pthread_key_t和pthread_key_create()详解
- 《LeetBook》LeetCode题解(1) : Two Sum[E]——哈希Map的应用