使用 FindFirstFileEx 函数递归遍历目录 [英] Traversing directories recursivelly using FindFirstFileEx function

查看:56
本文介绍了使用 FindFirstFileEx 函数递归遍历目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经调试过了,但我仍然不知道什么是罪魁祸首.

I've debugged it, but I still don't have any idea what could be the culprit.

#ifndef UNICODE 
#define UNICODE
#endif


#include <stdio.h>
#include <Windows.h>


void EndWithBackslash(TCHAR* string)
{
    if(string[wcslen(string)-1] != TEXT('\\')) wcscat(string,TEXT("\\"));
}


void Browse(const TCHAR* curdir)
{
    HANDLE hFoundFile;
    WIN32_FIND_DATA foundFileData;
    TCHAR buffer[MAX_PATH];

    wcscpy(buffer,curdir);

    EndWithBackslash(buffer);

    SetCurrentDirectory(buffer);

    hFoundFile = FindFirstFileEx(TEXT("*"),FINDEX_INFO_LEVELS::FindExInfoBasic,&foundFileData ,FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories ,NULL , NULL);

    if(hFoundFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if ((foundFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && wcscmp(foundFileData.cFileName,TEXT(".")) && wcscmp(foundFileData.cFileName,TEXT("..")) )
            {   
                EndWithBackslash(buffer);
                wcscat(buffer,foundFileData.cFileName);
                wprintf(TEXT("%s\n"),buffer);


                Browse(buffer);
            }
        }
        while(FindNextFile(hFoundFile,&foundFileData));
        FindClose(hFoundFile);


    }
}

int main(void) 
{   
    Browse(TEXT("F:\\"));

    system("Pause");
    return 0;
}

输出:

F:\$RECYCLE.BIN
F:\$RECYCLE.BIN\S-1-5-21-1271883188-2384997935-49719322-1000
F:\$RECYCLE.BIN\希捷
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0\系统卷信息
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0\System Volume Information\Video

F:\$RECYCLE.BIN
F:\$RECYCLE.BIN\S-1-5-21-1271883188-2384997935-49719322-1000
F:\$RECYCLE.BIN\Seagate
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0\System Volume Information
F:\$RECYCLE.BIN\Seagate\Seagate Dashboard 2.0\System Volume Information\Video

第一层"看起来如何:

你能指出我的错误吗?

推荐答案

内部应该是:

            TCHAR pszItemPath[MAX_PATH];
            wcscpy(pszItemPath, buffer);
            // NOTE: Now when we took a copy of buffer, we don't touch it so that next iteration would have it good and untouched
            EndWithBackslash(pszItemPath);
            wcscat(pszItemPath, foundFileData.cFileName);
            wprintf(TEXT("%s\n"), pszItemPath);

这篇关于使用 FindFirstFileEx 函数递归遍历目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆