c++ - FindFirstFile Windows8 错误

标签 c++

我正在尝试查找所有驱动器上的所有文件,操作系统是 Windows 8

    std::string FolderName = "C:\\";
    FindAllFiles(FolderName);
...
void FindAllFiles(std::string FolderName)
{
    WIN32_FIND_DATA FileData;
    HANDLE FirstFile = FindFirstFile(&FolderName[0], &FileData);
    if (FirstFile == INVALID_HANDLE_VALUE) {
        std::cout << "Invalid handle value" << std::endl;
        return;
    }

    while (FindNextFile(FirstFile, &FileData))
    {
        if (isalpha(FileData.cFileName[0]))
        {
            if (FileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY)
            {
                std::cout << FileData.cFileName << std::endl;
            }
            else
            {
                std::string NewPath = FolderName + FileData.cFileName;
                NewPath = NewPath + "\\*.*";
                    FindAllFiles(NewPath);
            }
        }
    }
    }

但总是收到 Invalid_handle_value 错误。有什么问题?

最佳答案

您没有调用 GetLastError(),当 Windows 函数失败时您应该始终这样做,但最可能的原因是您未能填写 FileData在调用 FindFirstFile 之前正确。

几乎所有供 Windows 函数使用的输出缓冲区都必须准备好:

  • 使用sizeof填充dwSize成员(这个结构没有这个)
  • 用零填充所有其他成员。

所以尝试初始化缓冲区:

WIN32_FIND_DATAA FileData = {};

关于c++ - FindFirstFile Windows8 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32402427/

相关文章:

c++ - 为什么我的循环没有终止?

c++ - GDB 观察实例 vector 中的类成员

android - Superpowered API - SuperpoweredDecoder::decode 不为文件末尾返回 0

c++ - 结构的大小和对齐方式

c++ - 在新变量中存储类实例会导致奇怪的行为(Arduino Serial)

c++ - 我可以以这种方式将数组转换为指针并返回指向常量的指针吗?

c# - 如何将对 COM 对象的 C# 引用传递给 C++ DLL

c++ - 指针 vector 中的内存泄漏

c++ - 不同类型气候条件的颜色编码背景

c++ - 在 C++ VSCode 中自动格式化同一行的大括号