windows下的文件遍历(使用CFindFile)
这个我一直都很想做了,前两天开始准备,查找了一下CFindFile的资料,然后把思路理清楚,就直接开始做了。
文件系统是一个操作系统以一部分,所以想文件操作,基本上就要依赖于操作系统提供的接口函数。
在这我是直接用windows中对文件查找专门做好了的一个类来实现文件的遍历。
其实一个文件目录就是一个树,每一层目录都有很多的子目录和文件,当成节点就好了。
在使用CFindFile遍历的时候,需要先调用FindFile函数,再调用FindNextFile函数来遍历当前这一级的目录。
我为了输出方便使用了控制台工程,在这里需要提示一点:
由于windows程序设计中默认使用unicode编码,所以在使用控制台程序输出的时候,需要使用wcout来进行输出。
而使用wcout进行输出的时候,如果遇到了汉字,则会导致程序卡住,然后停止运行的情况。
解决方法是添加下面的函数调用:
setlocale(LC_ALL, "chs");
这个函数是我在网上查到的,我遇到这个问题就是因为在遍历C盘目录的时候由于汉字的出现卡死,发现一个文件名只输出了前面的数字和英文部分,而汉字没输出。
先展示下我做的成果:

最后运行结束:

效果还可以吧?所有的目录应该都列出来了。
下面看一下函数:
void TraversFile(CString csPath)
{
CString csPrePath = csPath;
CString csNextPath = csPath;
CFileFind ff;
csPath += _T("*.*");//遍历这一级全部的目录
int nResult = ff.FindFile(csPath);
while(nResult)
{
nResult = ff.FindNextFileW();
if(ff.IsDirectory() && !ff.IsDots())
{
wcout << (LPCTSTR)ff.GetFilePath() << endl;
csNextPath += ff.GetFileName();
csNextPath += _T("\\");
TraversFile(csNextPath);
}
csNextPath = csPrePath;
}
}
这里主要采用的方法是递归调用,我觉得这种方式相对较简单,且代码段比较少可以看到,这个函数一共才20行,而且层次很清晰。
我觉得主要需要讲的就是那个if判断,因为在那块是需要注意的两个地方。
IsDirectory函数用来判断当前选中的这个文件是一个文件还是一个目录。所谓目录,其实就是文件夹啦~
如果是文件夹的话,就输出路径,然后整合文件夹的路径,传给递归调用函数,来遍历当前这个文件夹下的文件。
最开始这个这个函数的参数是某个子目录,比如我遍历的F盘,传入的参数就是:F:\\
传入这个参数之后,会在其后面添加*.*,FindFile函数在这个时候就开始查找当前目录的全部的文件和文件夹了。
基本上啊,就是一个树的深度优先遍历。
主函数的代码非常简单,但是能很好的完成功能:
using namespace std;
/*修改于20130625 做文件查找*/
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
setlocale(LC_ALL, "chs");
CString cs = _T("F:\\");
TraversFile(cs);
system("pause");
return ;
}
还不错吧?
windows下的文件遍历(使用CFindFile)的更多相关文章
- Windows下对文件夹下所有图片批量重命名(附C++,python,matlab代码)
https://blog.csdn.net/u011574296/article/details/72956446: Windows下对文件夹下所有图片批量重命名(附C++,python,matlab ...
- 关于Windows下的文件后缀名问题
一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...
- 将Windows下的文件同步到Linux下
需求:把Windows下的某些文件自动传送到Linux指定目录下 实现: 1. Windows下安装 WinSCP工具,并把Liunx服务器信息保存 2. 编写脚本,实现双击工具就把Windows下的 ...
- windows下在文件夹中快速启动cmd
在windows下,有时候由于特定需要,我们经常需要将cmd cd到某文件下进行命令行操作,其实,这里有一个小技巧: 在一个文件下,按住shift键,然后点击鼠标右键,你就会发现菜单栏中多出一个“在 ...
- linux或者windows下的文件拷贝
# 上代码 #!/usr/bin/env python # -*- coding:utf-8 -*- import os import shutil import tarfile base_dir ...
- windows下计算文件的md和sha值
在windows下可以使用FCIV命令行工具计算文件的md5和sha值,具体例子如下: FCIV -md5 -sha1 path\filename.ext 例如: FCIV-md5-sha1 c:\w ...
- windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式
常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...
- Windows下切分文件(GnuWin32)
windows下碰到查看大日志文件还真麻烦,今天找了个工具来做这个:安装GnuWin32,然后用里面的split命令分割日志文件 ps:发现intellij idea还挺好,超过2g的日志文件也能进行 ...
- windows下数据库文件使用脚本同步到linux下的mysql数据库中
1.背景 windows server 2008 下 每天会有 *.sql数据文件 需要上传到linux 中的mysql数据库中 而运维人员是在 windows server 下使用 xshell 连 ...
随机推荐
- MyEclipse构建WebService案例
Hi,大家好! 今天主要和大家分享,如何搭建一个Web服务,做Android开发,不可避免会涉及到客户端开发,我们怎么样来实现一个服务端,怎么样来实现一个客户端,并相互传递数据.就算调用别人的服务时, ...
- sudo su 提示没有配置JDK environment
sudo su 提示没有配置JDK environment 最近工作遇到一问题,我通过SecureCRT远程登录服务器,部署web应用.将变更文件替换后,我需要切换到root用户,重启Tomcat.所 ...
- bzoj 3142 数学
找规律后可以之后答案就是 k^(m-1)*(n-(m-1)*k)+(m+(m-1)*k+1)*k^(m-1) div 2 /************************************** ...
- 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏
文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...
- JavaScript之substring()方法讲解
定义和用法 substring() 方法用于提取字符串中介于两个指定下标之间的字符. 语法 stringObject.substring(start,stop) 参数 描述 start 必需.一个非负 ...
- windows下安装php5.2.*,php5.3.*,php5.4.*版本的memcache扩展(转)
拓展安装调试方法: 编写调试php文件 <?php memcache(); 通过命令行执行测试,因为php拓展安装成功与否与apache无关,所以没必要不断重启apache去看phpinfo ...
- Linux常用命令大全(转载)
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- UML组件图(转载)
概述: 组件图是不同的性质和行为.组件图用于模拟物理方面的系统. 现在的问题是什么,这些物理方面?物理方面的元素,如可执行文件,库,文件,证件等它位于在一个节点. 因此,组件图用于可视化的组织和系统组 ...
- php 如何判断一个常量是否已经定义
php 如何判断一个常量是否已经定义 http://blog.csdn.net/raojinpg/article/details/6222882 如果看过手册的人肯定知道,可以直接忽视 不过在实际项目 ...
- Android 4.4KitKat AudioRecord 流程分析
Android是架构分为三层: 底层 Linux Kernel 中间层 主要由C++实现 (Android 60%源码都是C++实现) 应用层 主要由JAVA开发的应用程序 应用程序执行 ...