MFC:CFileFind类使用方法介绍

       这是一个介绍MFC中CFileFind类的小程序。编写这个程序使用的编辑软件是VS2022,基于C++空项目。在C++空项目下要调用MFC类需要:首先,头文件要包含<afx.h>,这个头文件包含了绝大部分使用MFC所需头文件;其次,在项目属性中选用MFC类库(项目属性->配置属性->高级:选用MFC静态库)并把字符集选为“多字符集”。显示方式仍是控制台窗口。
       说到CFileFind类,它是MFC中关于文件操作(含目录,目录是特殊的文件,下面内容中不区分文件和目录,统一称作文件)的一个很重要的类,封装了关于文件查找、遍历的多种操作。提到MFC的类,常见的操作手法是通过类对象调用其成员函数完成相关操作,这个CFileFind类也不例外。下面,就CFileFind类使用的一般步骤介绍如下:
   1、声明CFileFind对象
        声明方式:CFileFind myFind; 
   2、开始查找函数FindFile
        函数调用方式: myFind.FindFile(); //参数 全路径名,可以使用通配符
        结合下一步骤函数FindNextFile()名字,可能会误以为FindFile这一步骤已将找到的第一个文件的信息保存到myFind中,实际上没有。这一步骤可以理解成是查找文件工作的初始化。FindFile函数有返回值,BOOL类型,初始化成功返回TRUE,失败返回FALSE。
   3、查找下一个文件FindNextFile()
        函数调用方式: myFind.FindNextFile( ); //无参 
        这个函数不能从字面理解,认为它只是和下一个文件相关。实际它的功能分成两块:一是将找到的当前文件的信息存入myFind;二是检查下一个文件的情况,检查结果就是返回值,下个文件存就返回TRUE、不存在则返回FALSE。
   4、调用系列Getxxx系列函数获取文件信息
        函数调用方式:myFind.GetFileName( ); //获得文件名函数,无参
       可以用CString对象接收返回值(文件信息),到这一步才可以得到文件的具体信息。
   5、调用系列Isxxx系列函数获取文件属性信息
        函数调用方式:myFind.IsDirectory( ); //获得文件是否是目录,无参
        返回值为BOOL类型,是目录返回TRUE,不是目录返回FALSE。
   6、关闭查找函数Close
        调用方式:myFind.Close( ); //无参
        关于CFileFind类的使用步骤,大致是上面这些,其中1、2、3、6是彼此匹配依赖出现的,不能漏项。
        根据上面的介绍内容,举一个遍历某目录并显示文件名的例子:(有关代码及注释如下)

#include <afx.h>
#include <iostream>
using namespace std;
void myfind(CString path)
{
    CString pathStr = path; //将参数传入的CString类型的路径赋值给strPath
    pathStr += "/*.*";//合在一起构成"c:/*.*"
    CFileFind myFind; //声明文件搜索类对象find
    BOOL isFind = myFind.FindFile(pathStr);//开始查找
    while (isFind) //如开始查找返回FALSE,则不会进入循环
    {
        isFind = myFind.FindNextFile();
             //返回下一个文件是否存在并将当前文件信息存入myFind对象
        CString fileName = myFind.GetFileName(); //获取文件名
        CString filePath = myFind.GetFilePath(); //获取文件全路径(含文件名)
        if (myFind.IsDirectory() && !myFind.IsDots()) {
            cout <<"[" << fileName << "]" << endl;
                 //如果文件是目录则将文件名(目录名)加上中括号显示
            myfind(filePath);
                 //对函数myFind进行递归调用(如查找到的文件是目录则调用函数自身继续进入目录)
        }
        else {
            cout <<fileName << endl; //如不是目录则显示文件名
        }
    }
    myFind.Close();//关闭CFileFind类对象
}
int main()
{
    myfind("c:"); //查找并显示C:目录下的所有文件
    system("pause");
    return 0;
}

附:一些获取文件信息、文件属性的函数
  GetLength 获取找到文件的长度,以字节为单位
  GetFileName 获取找到文件的名字
  GetFilePath 找到文件的全路径(含文件名)
  GetRoot 获取找到文件根目录
  GetCreationTime 获取文件创建时间
  GetLastAccessTime 获取文件最后一次打开的时间
  GetLastWriteTime 文件最后改变和存储的时间
  IsReadOnly 文件是否是只读
  IsDirectory 文件是否是目录
  IsCompressed 文件是否是压缩
  IsSystem 文件是否是系统文件
  IsHidden 文件是否是具隐藏属性
  IsTemporary文件是否是临时的
  IsNormal文件是否是常规的(无其它属性)
  IsArchived文件是否是档案

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值