C/C++编程 FindFirstFile、FindNext递归遍历硬盘文件

#include <stdio.h>
#include <windows.h>

//搜索文件函数
int SearchFile(char *path)
{
    char buffer[MAX_PATH] = {0};
    sprintf(buffer,"%s\\*.*",path);
    WIN32_FIND_DATA pNextInfo;//保存文件信息
    HANDLE hFile = 0;
    hFile = FindFirstFile(buffer,&pNextInfo);
    if ( hFile )
    {
        do
        {
            if(pNextInfo.cFileName[0] == '.')//过滤.和..
                continue;
            //dwFileAttributes值是可以一位或多位的,不好直接使用"=="来判断
            if( pNextInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )//判断是否为文件夹
            {
                ZeroMemory(buffer,MAX_PATH);
                sprintf(buffer,"%s\\%s",path,pNextInfo.cFileName);//将文件夹追加到目录,成为下一级要搜索目录
                SearchFile(buffer);//递归
            }
            printf("%s\\%s\n",path,pNextInfo.cFileName);//打印文件路径
        }
        while (FindNextFile(hFile,&pNextInfo));//遍历文件
    }
    FindClose(hFile);
    return 0;
}

int main(void)
{
    char str[MAX_PATH] = "C:\\Windows\\Prefetch";
    SearchFile(str);
    return 0;
}

/*
// 关于 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,
  *PWIN32_FIND_DATA,
  *LPWIN32_FIND_DATA;
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值