为什么 FindFirstFile 函数不接受我指向数据结构的指针?
Why won't the FindFirstFile function accept my pointer to a data struct?
亲爱的 Stack Overflow 社区。
我是第一次来这里 post。我发现这个论坛在过去非常有帮助,并希望将来能以多种方式做出贡献。现在我有一个问题,我无法辨认出头或尾。
我正在尝试使用 FindFirstFileA、FindNextFileA 和 CloseFind 函数获取特定目录中的文件名。我正在 Microsoft Visual Studio 2017 中编写 C++ 代码并使用 UNICODE。
我选择了 "A" 后缀版本而不是 "regular" 版本,因为我发现使用 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);
}
这段代码有一个 "weird" 问题,还有一个错误使我无法编译。
"weird" 事情:
在我能找到的所有 FindFirstFile 函数的所有文档和示例中
它说第二个参数应该是一个指针,因此我的代码实际上应该是这样的: hFind = FindFirstFileA(Path, &FileData);
但是当我尝试这样做时,编译器告诉我 LPWIN32_FIND_DATAA* 与 LPWIN32_FIND_DATAA 不兼容。我不知道那里发生了什么,所以对它的一些了解将不胜感激。
实际错误与此无关,但是:
当我尝试 运行 程序时,收到一条错误消息,指出 "FileData" 未初始化并且
然后拒绝运行。在我见过的所有示例中,数据结构的声明都和我一样。没有论坛 posts 我可以找到解决我的特殊问题。
现在,我知道我只 post 编辑了一个特定的功能,如果您需要了解更多我的设置,我很乐意为您提供帮助。任何对我的问题的见解或对我的 post 或我的代码是受欢迎的。
恭敬
尼克拉斯·比约克罗斯
LPWIN32_FIND_DATAA
已经 是 指针 - LP 前缀代表 "long pointer"(16 位时代的遗物)。
您想将变量声明为 WIN32_FIND_DATAA
并传递指向该变量的指针。
这是一个未初始化的指针:
LPWIN32_FIND_DATAA FileData;
LPWIN32_FIND_DATAA
是 WIN32_FIND_DATAA*
.
的类型定义
您需要的是结构的实际实例,例如
WIN32_FIND_DATAA FileData;
注意 LP
从类型的开头消失了。
然后当你将它的地址传递给函数时,指针类型将匹配。
hFind = FindFirstFileA(Path, &FileData);
亲爱的 Stack Overflow 社区。
我是第一次来这里 post。我发现这个论坛在过去非常有帮助,并希望将来能以多种方式做出贡献。现在我有一个问题,我无法辨认出头或尾。
我正在尝试使用 FindFirstFileA、FindNextFileA 和 CloseFind 函数获取特定目录中的文件名。我正在 Microsoft Visual Studio 2017 中编写 C++ 代码并使用 UNICODE。
我选择了 "A" 后缀版本而不是 "regular" 版本,因为我发现使用 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);
}
这段代码有一个 "weird" 问题,还有一个错误使我无法编译。
"weird" 事情:
在我能找到的所有 FindFirstFile 函数的所有文档和示例中 它说第二个参数应该是一个指针,因此我的代码实际上应该是这样的: hFind = FindFirstFileA(Path, &FileData); 但是当我尝试这样做时,编译器告诉我 LPWIN32_FIND_DATAA* 与 LPWIN32_FIND_DATAA 不兼容。我不知道那里发生了什么,所以对它的一些了解将不胜感激。
实际错误与此无关,但是:
当我尝试 运行 程序时,收到一条错误消息,指出 "FileData" 未初始化并且 然后拒绝运行。在我见过的所有示例中,数据结构的声明都和我一样。没有论坛 posts 我可以找到解决我的特殊问题。 现在,我知道我只 post 编辑了一个特定的功能,如果您需要了解更多我的设置,我很乐意为您提供帮助。任何对我的问题的见解或对我的 post 或我的代码是受欢迎的。
恭敬
尼克拉斯·比约克罗斯
LPWIN32_FIND_DATAA
已经 是 指针 - LP 前缀代表 "long pointer"(16 位时代的遗物)。
您想将变量声明为 WIN32_FIND_DATAA
并传递指向该变量的指针。
这是一个未初始化的指针:
LPWIN32_FIND_DATAA FileData;
LPWIN32_FIND_DATAA
是 WIN32_FIND_DATAA*
.
您需要的是结构的实际实例,例如
WIN32_FIND_DATAA FileData;
注意 LP
从类型的开头消失了。
然后当你将它的地址传递给函数时,指针类型将匹配。
hFind = FindFirstFileA(Path, &FileData);