win32 - 遍历文件

BOOL ShowDirectory(LPCWSTR directory)

{

    WIN32_FIND_DATA FindFileData = { 0 };  //FindFirstFile FindNextFile参数2

    HANDLE hFind = NULL;   //FindFirstFile返回值

    TCHAR wOriginalPath[MAX_PATH+2] = {0}; //用于拼接当前路径

    TCHAR wCurrentFile[MAX_PATH + 2] = { 0 };  //用于拼接当前查询到的文件或文件夹

    LPCWSTR pCurrentlPath = directory; //用于判断当前文件路径结尾

    LPCWSTR pFileName = NULL//用于判断文件名结尾

    UINT uPathCount = 0; //用于统计当前目录下...的个数

 

    //拼接路径

    //加上\\*后查询 -> 加等于查询该目录下第一个文件

    //1 目录存在 有文件则查询成功

    //2 目录存在 无文件则查询失败,既无显示数据

    //3 目录不存在则失败,无显示内容

    pCurrentlPath += wcslen(directory);

    if (pCurrentlPath == directory) return FALSE; //说明字符长度为0

    if (wcscpy_s(wOriginalPath, MAX_PATH+2,directory)) return FALSE//拷贝目录

    pCurrentlPath--;

    if (*pCurrentlPath == '\\')

        wcscat_s(wOriginalPath, MAX_PATH + 2,L"*");

    else

        wcscat_s(wOriginalPath, MAX_PATH + 2, L"\\*");

   

 

    // 判断路径是否存在,此时已经开始查询目录下的第一个文件

    hFind = FindFirstFile(wOriginalPath, &FindFileData);

    if (INVALID_HANDLE_VALUE == hFind)

        return FALSE;

   

    //获取当前目录下文件,判断属性是否为文件夹

    //文件夹 -> 进入遍历

    //文件 -> 打印

    //...则不打印

    do

    {

        swprintf_s(wCurrentFile, MAX_PATH + 2, L"%s%s%s", directory, L"\\", FindFileData.cFileName);

 

        if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //0则不是文件夹

        {

            //文件夹

            //...隐藏

            if (uPathCount < 2) {

                pFileName = FindFileData.cFileName;

                pFileName += wcslen(FindFileData.cFileName);

                if (pFileName == FindFileData.cFileName) continue; //说明字符长度为0

                if (*--pFileName == L'.')

                {

                   uPathCount++;

                   continue;   //遇到.退出当前循环

                }

            }

           

            ShowDirectory(wCurrentFile);

           

        }

        else

        {

            wprintf(L"%s\n", wCurrentFile);

        }

 

        ZeroMemory(wCurrentFile, MAX_PATH + 2);

 

    } while (FindNextFile(hFind, &FindFileData));

   

    FindClose(hFind);

 

    return TRUE;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值