MFC CFileFind类用法总结

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC CFileFind类用法总结相关的知识,希望对你有一定的参考价值。

简介

头文件:

afx.h 

功能:本地文件查找

具体类型文件:.格式,例如:.pdf:查找.pdf文件
所有 文件:*.*

API

构造函数

CFileFind类的构造函数::CFileFind()和关闭函数::Close(),成对使用。

成员函数

成员函数根据操作特性分成三类:

  • 查找操作类
  • 获得文件属性类
  • 判断文件属性类

查找操作类:

FindFile():

函数原型:

virtual BOOL FindFile(LPCTSTR pstrName = null,DWORD dwUnused = 0); 

注意dwUnused:必须为0

FindNextFile():

两个函数返回值

  • 非0还有符合条件的文件
  • 0表示是最后一个文件。

获得文件属性类:

GetCreationTime():

函数原型

virtual BOOL GetCreationTime(FILETIME *pFileTime) const; 
virtual BOOL GetCreationTime(CTime& refTime) const; 

该函数用来获得查找到的某个文件的创建时间

返回值:

  • 非0获得创建时间成功操作
  • 0表示执行获得创建时间失败或者FindNextFile()没有被执行的时候。

参数:

  • FILETIME:容纳时间的结构指针
  • CTime&:容纳时间的对象地址

FILETIME和CTime相互转换可以参考我的另一篇博文:https://yangyongli.blog.csdn.net/article/details/122354748

GetLastWireTime();

函数原型:

virtual BOOL GetLastAccessTime(FILETIME *pFileTime) const; 
virtual BOOL GetLastAccessTime(CTime& refTime) const; 

该函数用来获得某个文件最后被访问的时间

返回值:

  • 非0表示执行成功
  • 0表示执行失败或者FindNextFile()函数没有执行的时候。

参数同上面函数GetCreationTime();

GetFileName();

virtual CString GetFileName() const; 

该函数用来获得查找到的文件的全称,带后缀名。

GetRoot();

virtual CString GetRoot() const; 

该函数用来获得查找到的文件的根目录。

GetFilePath();

virtual CString GetFilePath() const; 

该函数用来获得查找到的文件绝对路径。

GetFileTitle();

virtual CString GetFileTitle() const; 

该函数用来获得查找到的文件的名称,无后缀名。

GetFileURL();

virtual CString GetFileURL() const; 

该函数用来获得查找到的文件的URL路径。

GetLength();

DWORD GetLength() const; 

该函数返回值获得查找到的文件的长度,文件属性之Size。

判断文件属性类:

IsArchived();

BOOL IsArchived() const; 

=该函数用来判断查找的文件属性是否是档案文件。

返回值:

  • 非0表示是
  • 0表示不是。

IsCompressed();

BOOL IsCompressed() const; 

==该函数用来判断查找的文件属性是否是压缩文件。==非0表示是,0表示不是。

IsDirectory();

BOOL IsDirectory() const; 

该函数用来判断查找的文件属性是否是路径文件,非0表示是,0表示不是。

IsDots();

BOOL IsDots() const;
该函数用来判断查找的文件属性是否是“.”或者“…”,非0表示是,0表示不是。

IsHidden();

BOOL IsHidden() const; 

该函数用来判断查找的文件属性是否隐藏文件,非0表示是,0表示不是。

IsNormal();

BOOL IsNormal() const; 

该函数用来判断查找的文件属性是否正常文件,非0表示是,0表示不是。

IsReadOnly();

BOOL IsReadOnly() const; 

该函数用来判断查找的文件属性是否只读文件,非0表示是,0表示不是。

IsSystem();

BOOL IsSystem() const; 

该函数用来判断查找的文件属性是否系统文件,非0表示是,0表示不是。

IsTemporary();

BOOL IsTemporary() const; 

该函数用来判断查找的文件属性是否临时文件,非0表示是,0表示不是。

MachesMask();

BOOL MatchesMask(DWORD dwMask) const; 

该函数用来判断查找的文件的综合属性,非0表示是,0表示不是。

dwMask参数的使用方法:几种文件属性采用或运算(|)

dwMask参数文件属性的结构定义:

  • FILE_ATTRIBUTE_ARCHIVE:档案文件
  • FILE_ATTRIBUTE_COMPRESSED:压缩文件
  • FILE_ATTRIBUTE_DIRECTORY:路径文件
  • FILE_ATTRIBUTE_NORMAL:正常文件
  • FILE_ATTRIBUTE_READONLY:只读文件
  • FILE_ATTRIBUTE_SYSTEM:系统文件
  • FILE_ATTRIBUTE_TEMPORARY:临时文件
  • FILE_ATTRIBUTE_HIDDEN:隐藏文件

CFileFind成员函数使用的顺序:

创建对象,执行FindFile()函数,然后执行FindNextFile(),然后执行获得/判断文件属性类函数。

其他一些问题以及解决方法:

  1. CFileFind类中返回的文件顺序与文件系统有关,如果是NFTSCDFS文件系统,是以文件的字母顺序排列的,FAT文件系统下,是以文件增加的先后顺序排列的,而不是按字母顺序。
  2. 利用CFileFind类查找文件时会出现重复现象, 其原因也是跟文件系统类型有关,通常的解决方法:现将CFileFind类查找到的文件全部保存下来,然后再进行处理;切勿交叉处理。
  3. 另外介绍一种简单的排序方法,每查到一个文件,随后将其加入CListBox控件中显示(CListBox风格中得选中sort),因为CListBox控件有自动排序功能。
  4. 关于IsDots:每个目录下都有两个缺省的目录:名称分别为“.”和“..”,分别代表本层目录和上层目录

以上是关于MFC CFileFind类用法总结的主要内容,如果未能解决你的问题,请参考以下文章

MFC文件读写操作

MFC获取指定文件夹文件目录

CFileFind类的使用总结

标准C++中的string类的用法总结(转)

标准C++中的string类的用法总结

标准C++中string类的用法总结