且听下回分说 2019-03-17 17:05 采纳率: 70%
浏览 658
已采纳

把遍历文件夹中所有的文件名写入一个txt文件中保存

自己给出一个文件夹,把该文件夹中所有的文件名写入一个自定义txt文件中保存

现在不能遍历子文件夹

      WIN32_FIND_DATAA fileData;
            char strfile[1024] = {};
            HANDLE hflie = CreateFile(_T("遍历结果.txt"), 
            GENERIC_ALL, FILE_SHARE_READ, nullptr, CREATE_NEW,FILE_ATTRIBUTE_NORMAL, nullptr);

            HANDLE hfiandfile = FindFirstFileA("../遍历文件夹/*.*",&fileData);
            memcpy(strfile, fileData.cFileName, sizeof(char)*strlen(strfile));
            strcat_s(strfile, "\r\n");

            DWORD len = 0;
            WriteFile(hflie, strfile, strlen(strfile), &len, nullptr);

            while (FindNextFileA(hfiandfile, &fileData))
            {
                ZeroMemory(strfile, sizeof(char)* 1024);
                memcpy(strfile, fileData.cFileName, sizeof(char)*strlen(fileData.cFileName));
                strcat_s(strfile, "\r\n");
                WriteFile(hflie, strfile, strlen(strfile), &len, nullptr);
            }

            CloseHandle(hflie);
            CloseHandle(hfiandfile);

            return (INT_PTR)TRUE;
        }
  • 写回答

3条回答 默认 最新

  • benpaodaoren 2019-03-18 13:29
    关注

    遍历子文件夹一般都用递归来做,给你个用递归实现的代码,如果不用递归做会比较麻烦。

    #define MAX_PATH_TEST (1024)
    void RecursionDir(char* pcDir, HANDLE hOutFile)
    {
    char strfile[MAX_PATH_TEST] = {};
    char acFind[MAX_PATH_TEST] = {};
    sprintf(acFind, "%s/*", pcDir);
    WIN32_FIND_DATAA fileData;
    HANDLE hfiandfile = FindFirstFileA(acFind,&fileData);
    if (INVALID_HANDLE_VALUE == hfiandfile)
    {
    return;
    }

    do 
    {
        if (0 == strcmp(fileData.cFileName, ".") || 0 == strcmp(fileData.cFileName, ".."))
        {
            continue;
        }
    
        ZeroMemory(strfile, sizeof(char)* MAX_PATH_TEST);
        memcpy(strfile, fileData.cFileName, sizeof(char)*strlen(fileData.cFileName));
        strcat_s(strfile, "\r\n");
        DWORD len = 0;
        WriteFile(hOutFile, strfile, strlen(strfile), &len, nullptr);
    
        if (fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            char acChild[MAX_PATH_TEST] = {};
            sprintf(acChild, "%s/%s", pcDir, fileData.cFileName);
            RecursionDir(acChild, hOutFile);
        }
    
    } while (FindNextFileA(hfiandfile, &fileData));
    FindClose(hfiandfile);
    

    }

    int main(){

    WIN32_FIND_DATAA fileData;
    char strfile[1024] = {};
    HANDLE hflie = CreateFile(_T("遍历结果.txt"), 
    GENERIC_ALL, FILE_SHARE_READ, nullptr, CREATE_NEW,FILE_ATTRIBUTE_NORMAL, nullptr);
    
    RecursionDir("../遍历文件夹", hflie);
    
    CloseHandle(hflie);
    
    return 0;
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline