c++ 遍历文件时出现不读取文件夹的情况


#include <stdio.h>
#include <Windows.h>
using namespace std;
void FindFile(const char* filename)//函数语句:找出全盘文件
{   
    char tempPath[1000] = { 0 };
    sprintf(tempPath, "%s\\*.*", filename);

    WIN32_FIND_DATA finddata;//文件属性
    HANDLE hfile = FindFirstFile(tempPath, &finddata);
    while (1)
    {
        if (finddata.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)//文件夹
        {
            if (finddata.cFileName[0] != '.')
            {
                sprintf(tempPath, "%s\\%s", filename, finddata.cFileName);
                printf("%s——————————————————\n", tempPath);
                FindFile(tempPath);
            }
        }
        else//文件
        {
            sprintf(tempPath, "%s\\%s", filename, finddata.cFileName);
            printf("%s****************此处不读\n", tempPath);
        }
        if (FindNextFile(hfile, &finddata) == 0)
            break;
    }
}
int main()
{
    char path[5] = { 0 };
    unsigned alldisk;
    printf("主人:\n正在为您检测U盘的拔插喵喵喵喵喵喵。。。。。。\n");
    while(1)
    {
        alldisk = GetLogicalDrives();
        for (int i = 0; i < 10; i++)
        {
            if ((alldisk & 1) == 1)
            {
                sprintf(path, "%c:", 'A' + i);                
            }
            alldisk = alldisk >> 1;
            }
        if (GetDriveType(path) == DRIVE_REMOVABLE)
            break;
    }
    printf("主人:\nU盘:%s已经插入喵", path);
    FindFile("F:\Documents");


    return 0;
}


一:
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/971609635886131.png "#left")
文件夹Documents中存在文件,不读取其中的文件。
二:

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/022599635886121.png "#left")






![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/19000073588618.png "#left")
读取study文件夹里面的文件,但是不读取videos里面的文件。
求求大佬解答

递归一下

void FindFile(const char* filename)
{
    char tempPath[1000] = { 0 };
    sprintf(tempPath, "%s\\*.*", filename);

    WIN32_FIND_DATA finddata;
    HANDLE hfile = FindFirstFile(tempPath, &finddata);
    if (hfile == INVALID_HANDLE_VALUE)
    {
        printf("无法打开目录: %s\n", filename);
        return;
    }

    do
    {
        if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (strcmp(finddata.cFileName, ".") != 0 && strcmp(finddata.cFileName, "..") != 0)
            {
                sprintf(tempPath, "%s\\%s", filename, finddata.cFileName);
                printf("%s——————————————————\n", tempPath);
                FindFile(tempPath);
            }
        }
        else
        {
            sprintf(tempPath, "%s\\%s", filename, finddata.cFileName);
            printf("%s****************此处不读\n", tempPath);
        }
    } while (FindNextFile(hfile, &finddata) != 0);

    FindClose(hfile);
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7616117
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++ 控制台程序选择文件/文件夹
  • 除此之外, 这篇博客: C++什么是进程?进程由什么组成?中的 进程的组成 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    进程具备文本、数据和堆栈片段以及它自己的资源。其中资源可以是文件、对象句柄、设备、信号量、互斥量、管道等等。操作系统中有大量的信息和进程息息相关。这些信息保存在一个叫做进程控制块、或者进程信息块的结构里面。
    这个结构就是进程对操作系统的表现形式。重要信息定义和描述了对应进程。操作系统需要它来管理进程和它们的资源。用户通过函数调用或者访问数据结构来使用该结构中的信息。

    与进程相关的信息都保存在对应的结构内,调用函数返回相关重要信息,例如进程信息块中的进程名字、ID号、内存和分配资源的指针、寄存器保存区、进程优先级等等。
    其中进程ID是每个新进程关联的唯一标识。当操作系统重新获得CPU时间时,他就需要寄存器中保存区内的保存信息,来重新启动该进程

    进程的属性包含保存在进程信息快中的所有信息,以及信号、I/O、虚拟内存操作计数器、进程退出状态、异常调试端口等信息。
    其中计数器主要是记录I/O操作类型和数量以及线程所执行虚拟内存操作的变量。
    退出状态是指进程终止的原因。
    异常调试端口是进程间通信渠道。

  • 您还可以看一下 malloc老师的c++游戏逆向内存封包课程中的 逆向体系课程介绍小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^