方法:如何解决CFindFile:FindNextFile找不到最后一个文件
来源:互联网 发布:网络监控系统原理图 编辑:程序博客网 时间:2024/06/16 22:52
转载请注明来源: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。我认为这才是微软的初忠。
1 0
- 方法:如何解决CFindFile:FindNextFile找不到最后一个文件
- CFindFile找不到最后一个文件
- FindFile FindNextFile 如何遍历一个文件夹并获取里面文件的信息
- 如何解决MathPage.wll文件找不到问题
- 解决VS2013找不到windows.h文件方法
- 解决xx.so 库文件找不到方法
- va_list va_start cfindfile遍历文件
- va_list va_start cfindfile遍历文件
- C# 寻找文件(FindNextFile)
- ifstream(一)之 eof() 函数——解决读取文件最后一个数据多读一次的方法
- 关于CFindFile的一个小问题
- 如何使用log4j(续 系统找不到指定文件的解决)
- 如何解决找不到库文件目录的问题
- iOS如何快速解决PCH文件的路径找不到问题
- 解决.找不到scaffold方法
- 如何删掉字符串最后一个字符(使用substring方法)
- svn项目放到桌面后,导致桌面上的图标有了问号,如何去掉?--3种方法,最后一个解决最好用
- 解决乱码的最后方法
- 我对.Net应用价值的一些思考
- 用纯C语言写的一个植物大战僵尸的外挂
- 方法:如何获取操作系统所有分区(逻辑驱动器)
- Loading Large Bitmaps Efficiently
- 2016.07.11 完成 9 道题
- 方法:如何解决CFindFile:FindNextFile找不到最后一个文件
- 带有过渡效果的搜索框
- 方法:CListBox快速清空
- DB2的DB2CODEPAGE错误一例
- 方法:如何解决用MFC实现的ping功能中把目标主机不可到达的当成ping通的问题
- 使用栈实现简单的算数解析
- 方法:如何解决NetShareEnum返回ERROR_NO_UNICODE_TRANSLATION(1113)的问题
- 方法:如何获取远程PC所有共享资源
- Android技术进阶的要素——Android属性动画