c++ Windows API FindFirstFile函数

1.前言

        上文介绍了windows API 获取文件属性 GetFileAttributes()函数;

        Windows  API中还有一个函数FindFirstFile()也能够查询一些文件的属性;

        本文介绍FindFirstFile函数

2.内容

         FindFirstFile():主要用于在文件系统中查找指定目录中的第一个文件或目录,并返回其句柄。通常使用场景是进行文件搜索和管理,效率相对较高。

2.1函数原型

HANDLE FindFirstFile(  
  LPCTSTR lpFileName,              // 指向要搜索的目录或文件名的指针  
  LPWIN32_FIND_DATA lpFindFileData // 指向WIN32_FIND_DATA结构的指针,用于接收找到的文件或目录的信息  
);

 放回值类型:HANDLE

在Windows中,HANDLE是一个指向对象的句柄,表示对象在内核对象表中的唯一标识。
HANDLE的类型实际上是一个指针类型,它可以指向不同类型的对象,包括文件、进程、线程、事件、互斥体等。
在C++中,HANDLE被定义为void*类型,可以通过一些特定的函数进行类型转换。
例如,将HANDLE转换为文件句柄可以使用函数CreateFile(),将HANDLE转换为进程句柄可以使用函数OpenProcess()。

以上为InsCode AI 关于HANDLE介绍的回答,不容易理解。这里我们不用过于关心。

函数参数一:LPCTSTR

 它是一个宏定义,由几个部分组成:

        1.LP表示long pointer  : 长指针类型

        2.C表示const : 指针指向的内容为常量

        3.T代表在Win32环境中可能存在的_T宏,用于兼容Unicode和ANSI字符串;(具体不太清楚)

        4.STR表示这个变量是一个字符串

函数参数二:LPWIN32_FIND_DATA

        它是一个指向WIN32_FIND_DATA结构体的指针,我们可以从上面关于LP的解释中得到该结论。

        WIN32_FIND_DATA结构体的成员如下:

typedef struct _WIN32_FIND_DATA {  
    DWORD       dwFileAttributes;       // 文件属性  
    FILETIME    ftCreationTime;         // 文件创建时间  
    FILETIME    ftLastAccessTime;       // 文件最后一次访问时间  
    FILETIME    ftLastWriteTime;        // 文件最后一次修改时间  
    DWORD       nFileSizeHigh;          // 文件大小的高32位  
    DWORD       nFileSizeLow;           // 文件大小的低32位  
    DWORD       dwReserved0;            // 系统保留  
    DWORD       dwReserved1;            // 系统保留  
    TCHAR       cFileName[MAX_PATH];    // 长文件名  
    TCHAR       cAlternateFileName[14]; // 8.3格式文件名  
} WIN32_FIND_DATA, *LPWIN32_FIND_DATA;

        可以看到该结构体包含了文件属性、文件创建时间、文件最后一次访问时间、文件最后一次修改时间、文件大小、长文件名等信息。

函数使用示例

    WIN32_FIND_DATA ffd;
    HANDLE hFind = FindFirstFile("work.h", &ffd); // work.h 是文件地址

    if (hFind == INVALID_HANDLE_VALUE) {  
        std::cerr << "Failed to find the first file." << std::endl;  
        return 1;  
    }  

    // 关闭句柄
    FindClose(hFind);  
  1. 首先声明一个WIN32_FIND_DATA结构体变量
  2. 将结构体变量的地址传入函数
  3. 使用句柄来判断函数执行结果

 函数使用注意事项

  • 函数传入WIN32_FIND_DATA结构体变量的地址
  • 在使用完FindFirstFile后,应该使用FindClose函数关闭该句柄,以释放与之关联的资源。
  • 在处理文件名时,应注意文件名可能包含空格、特殊字符或Unicode字符,因此应适当处理这些情况。
  • 如果需要搜索具有特定属性的文件(如隐藏文件、只读文件等),则可能需要结合其他函数或API来实现。
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在找资料的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值