FindFirstFile Windows8错误

时间:2015-09-04 16:14:16

标签: 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错误。有什么问题?

1 个答案:

答案 0 :(得分:1)

你没有调用GetLastError(),当Windows函数失败时你应该总是这样做,但最可能的原因是你在调用{{1}之前未能正确填写FileData }}

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

  • 使用FindFirstFile填充dwSize成员(此结构不具备此功能)
  • 将所有其他成员填入零。

因此尝试使用以下命令初始化缓冲区:

sizeof