亲爱的Stack溢出社区。
我是这里的第一张海报。我发现这个论坛在过去非常有帮助,并希望在未来的许多方面作出贡献。现在我有一个无法分辨头尾的问题。
我试图使用FindFirstFileA、FindNextFileA和CloseFind函数在特定目录中获取文件名。我正在使用MicrosoftVisualStudio2017编写C++代码,并使用UNICODE。
我选择了"A"-suffix版本,而不是“常规”版本,因为我发现使用LPCWSTR很麻烦。
我的相关功能代码目前如下所示:
void MainLoop::FindFiles(std::string Directory)
{
    Directory = Directory + "*";
    LPCSTR Path = Directory.c_str();
    LPWIN32_FIND_DATAA FileData;
    HANDLE hFind;
    hFind = FindFirstFileA(Path, FileData);
    while (FindNextFileA(hFind, FileData) != 0)
    {
        Files.push_back(FileData->cFileName);
    }
    FindClose(hFind);
}这段代码有一个“奇怪”的地方,还有一个错误不让我编译。
“奇怪”的事情:
在我可以在所有FindFirstFile函数上找到的所有文档和示例中,它都指出第二个参数应该是一个指针,因此我的代码实际上应该如下所示: hFind = FindFirstFileA(Path,&FileData);但是当我尝试这样做时,编译器告诉我LPWIN32_FIND_DATAA*与LPWIN32_FIND_DATAA不兼容。我不知道那是怎么回事,所以请给我点光。
然而,实际错误与此无关:
当我试图运行程序时,会收到一条错误消息,说明"FileData“未初始化,然后拒绝运行。在我看到的所有示例中,数据结构都是像我一样声明的。没有论坛的帖子,我可以找到解决我的特殊问题。现在,我知道我只发布了一个特定的函数,如果您需要更多的了解我的设置,我会很高兴地告诉您。任何对我的问题的洞察力或对我的帖子或我的代码的建设性意见都是欢迎的。
恭敬
尼可拉斯·比约克罗斯
发布于 2020-04-20 19:49:20
这是一个未初始化的指针:
LPWIN32_FIND_DATAA FileData;LPWIN32_FIND_DATAA是用于WIN32_FIND_DATAA*的类型胡枝子。
您需要的是结构的实际实例,如
WIN32_FIND_DATAA FileData;注意,LP从类型的开始就消失了。
然后,当您将其地址传递给函数时,指针类型将匹配。
hFind = FindFirstFileA(Path, &FileData);发布于 2020-04-20 19:49:04
LPWIN32_FIND_DATAA 已经是一个指针-- LP前缀代表“长指针”(16位时代的遗物)。
您希望将变量声明为WIN32_FIND_DATAA,并传递指向该变量的指针。
https://stackoverflow.com/questions/61330771
复制相似问题