如何递归遍历磁盘文件

遍历磁盘文件的API为FindFirstFile和FindNextFile
其原型如下:

//INVALID_HANDLE_VALUE 表示失败
HANDLE FindFirstFile(
  LPCTSTR lpFileName,      //文件路径
  LPWIN32_FIND_DATA lpFindFileData  //文件信息结构
);
//返回非0表示成功,0表示失败
BOOL FindNextFile( 
  HANDLE hFindFile,   //FindFirstFile返回的文件句柄
  LPWIN32_FIND_DATA lpFindFileData //文件信息结构
);

代码如下:

BOOL SearchFile(TCHAR* szPath)
{
    WIN32_FIND_DATA windata = { 0 };            //文件信息结构
    HANDLE hFile = NULL;
    TCHAR szPathNext[MAX_PATH];                 //存放下一级目录路径
    ZeroMemory(szPathNext, sizeof(szPathNext));
    sprintf(szPathNext, "%s//*.*", szPath);     //递归的时候继续深入下一级目录查找文件 
    hFile = FindFirstFile(szPathNext, &windata);//查找第一个文件(夹)
    if (hFile == INVALID_HANDLE_VALUE)
        return FALSE;
    do 
    {
        if(windata.cFileName[0] == '.')         //如果是当前目录或者上级目录,则进入下一次循环
            continue;
        if (windata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //判断是否是文件夹
        {
            sprintf(szPathNext, "%s//%s", szPath, windata.cFileName); 
            SearchFile(szPathNext); //递归查找
        } 
        else
        {   
            printf("%s//%s\n", szPath, windata.cFileName);//如果是文件则输出文件路径
        }

    } while (FindNextFile(hFile,&windata));     //如果深入到最后一层没有文件了则以次退出到上一层目录
    FindClose(hFile);
    return TRUE;
}

例如:
SearchFile(“C:\temp”);

其结果如图:

需要注意的是如果用TCHAR类型,最好把字符集设为未设置,否则遇到中文路径会出错的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值