修改后的函数没有递归无法正常工作

问题描述

我有一个递归函数,它通过目录树列出位于其中的文件名进行迭代。

功能如下:

void WINAPI SearchFile(PSTR Directory)
{
    HANDLE hFind;
    WIN32_FIND_DATA FindData;

    char SearchName[1024],FullPath[1024];

    memset(SearchName,sizeof(SearchName));
    memset(&FindData,sizeof(WIN32_FIND_DATA));

    sprintf(SearchName,"%s\\*",Directory);

    hFind=FindFirstFile(SearchName,&FindData);

    if(hFind!=INVALID_HANDLE_VALUE)
    {
        while(FindNextFile(hFind,&FindData))
        {
            if(FindData.cFileName[0]=='.')
            {
                continue;
            }
           
            memset(FullPath,sizeof(FullPath));
            sprintf(FullPath,"%s\\%s",Directory,FindData.cFileName);

            if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
              MessageBoxA(NULL,FullPath,"Directory",MB_OK);
                SearchFile(FullPath);
            }

            else
            {
                MessageBoxA(NULL,"File",MB_OK);
            }

        }

        FindClose(hFind);
    }
}

我需要用一个非递归的函数代替它,我玩过其他循环功能的方法,例如标签,但是似乎总是在结束前只列出一个目录树。

这是我修改的代码:

char* Directory = "D:\\test_location";

label:
HANDLE hFind;
WIN32_FIND_DATA FindData;

char SearchName[1024],FullPath[1024];


memset(SearchName,sizeof(SearchName));
memset(&FindData,sizeof(WIN32_FIND_DATA));

sprintf(SearchName,Directory);

hFind = FindFirstFile(SearchName,&FindData);

if (hFind != INVALID_HANDLE_VALUE)
{
    while (FindNextFile(hFind,&FindData))
    {
        if (FindData.cFileName[0] == '.')
        {
            continue;
        }

        memset(FullPath,sizeof(FullPath));                           


        sprintf(FullPath,FindData.cFileName);
        //MessageBoxA(NULL,"FullPath",MB_OK);

        if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            MessageBoxA(NULL,MB_OK);
            char cArray[1024];
            memset(cArray,sizeof(cArray));
            sprintf(cArray,"%s",FullPath);
            Directory = cArray;
            goto label;
            //SearchFile(FullPath);
        }
        else
        {
            MessageBoxA(NULL,MB_OK);
        }
    }

    FindClose(hFind);
}

两个函数之间显然存在差异,但是我不明白是什么使它们的行为有所不同。有谁知道我为什么遇到这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)