为什么 FindFirstFile 函数不接受指向数据结构的指针?



亲爱的Stack Overflow社区。

我是这里的第一次海报。我发现这个论坛在过去非常有帮助,并希望在未来的许多方面做出贡献。现在我有一个问题,我搞不清是头还是尾。

我正在尝试使用FindFirstFileA、FindNextFileA和CloseFind函数获取特定目录中的文件名。我正在Microsoft Visual Studio 2017中使用UNICODE编写C++代码。

我选择了"A"后缀版本,而不是"常规"版本,因为我发现使用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"未初始化然后拒绝逃跑。在我看到的所有示例中,数据结构的声明与我所看到的一样。我找不到任何论坛帖子来解决我的特殊问题。现在,我知道我只发布了一个特定的函数,如果你需要了解我的设置,我很乐意向你介绍。欢迎对我的问题有任何见解,或对我的帖子或代码发表建设性意见。

尊敬的

Niklas Björkeroth

这是一个未初始化的指针:

LPWIN32_FIND_DATAA FileData;

CCD_ 1是CCD_ 2的typedef。

你需要的是一个实际的结构实例,比如

WIN32_FIND_DATAA FileData;

请注意,LP从类型的开头就消失了。

然后,当您将其地址传递给函数时,指针类型将匹配。

hFind = FindFirstFileA(Path, &FileData);

LPWIN32_FIND_DATAA已经是一个指针-LP前缀代表"长指针"(16位时代的遗迹(。

您希望将变量声明为WIN32_FIND_DATAA,并将指针传递给它。

相关内容

  • 没有找到相关文章

最新更新