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文件是否是档案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值