文档章节

方法:如何解决CFindFile:FindNextFile找不到最后一个文件

妆台秋思
 妆台秋思
发布于 2017/08/14 14:28
字数 443
阅读 2
收藏 0
转载请注明来源: http://www.cnblogs.com/xuesongshu/

  在网上搜索到的一些遍历算法不仅繁锁,而且存在抄袭现象,而且抄袭的对象有问题,因为他们忽视了一个FindNextFile的一个很重要的问题。在这里我把对问题的分析以及我的方法分享给大家。

  首先说明一下,Windows把所有数据单元称为文件,目录(即文件夹)也不例外。它有一个宏定义FILE_ATTRIBUTE_DIRECTORY标记注明该文件记录的是文件系统信息,而不是用户数据。目录与普通文件的一个重要区别是目录存储的是别的文件的信息。而普通文件记录的才是用户想要存储的数据。

  实践证明,当FindNextFile找到最后一个文件时,它的返回值是FALSE。所以这个返回值我认为需要重新理解:它表示下次再执行该方法时找不到当前目录下的其它文件记录,不是表示本次没有找到。如果我们把文件系统对一个一个的文件的记录理解为单向链表,那么返回值FALSE表示下一个结点是NULL。

  知道了问题,那么遍历算法可以这样写:

CFileFind ff;
		BOOL bFind=ff.FindFile("c:\\*.*");
		CString szFileName=L"";
		do 
		{
			bFind=ff.FindNextFile();
			if (ff.IsDots())
			{
				continue;
			}
			szFileName=ff.GetFileName();
			if (szFileName.IsEmpty())
			{
				break;
			}
			if (!ff.IsDirectory())
			{
				InsertItem(0,szFileName.GetBuffer(szFileName.GetLength()));
			}
		} while (bFind);

  

  网上还搜到了一些方法,如何判断当前对象是不是目录(文件夹)。方法是调用shellapi。我认为大可不必如此麻烦,请看我的方法:

BOOL isDirectory=::GetFileAttributes(szFullPath)&FILE_ATTRIBUTE_DIRECTORY;

  呵呵,又提到了FILE_ATTRIBUTE_DIRECTORY。我认为这才是微软的初忠。

© 著作权归作者所有

妆台秋思
粉丝 0
博文 66
码字总数 67163
作品 0
深圳
Android工程师
私信 提问
用WinInet开发Internet客户端应用指南

概述 一个Internet客户端程序的目的是通过Internet协议如:HTTP、FTP等来存取网络数据源(服务器)的信息。客户端程序可以访问服务器获 得象天气预报,股票价格、重要新闻数据,甚至是与服务...

JORDANSG
2012/07/13
178
0
php自动加载

很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。 在 PHP 5 中,不再需要这样了。...

晨曦之光
2012/03/09
492
0
eclipse 4.3安装 maven3.01报错

maven 环境变量也配置了好了。 最后在eclipse-windows-Preferences-Install/Update-Available Software Sites Add 按钮 name:maven 路径选择zip格式的maven文件(包含features,plugins文件夹...

BobbyLou
2015/04/23
122
1
Compass搜索引擎对索引文件的优化

红薯大哥,请教您一个有关使用Compass创建索引文件后的优化问题: 问题:使用Compass创建索引文件,生成对应4个索引数据文件,功能发布到服务器后,经过一段时间的观察,lsof 这些索引文件使...

battier
2011/12/29
848
2
C++获取一个文件夹下的所有文件名(转)

C++获取一个文件夹下的所有文件名 window + vs2005: #ifndef FUNCH #define FUNCH #include #include #include #include using namespace std; vector & getfilelist(char *foldname) { vec......

云栖希望。
2017/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部