“查找第一个文件”始终返回无效的\u句柄\u TRUE 我正在编写一个C++控制台应用程序来列出给定目录中的所有文件。我的代码如下,但它总是返回“INVALID\u HANDLE\u TRUE”。我使用了windows.h库,并使用WIN 32 FIND DATA和FindFirstFile函数打开了一个目录
谢谢“查找第一个文件”始终返回无效的\u句柄\u TRUE 我正在编写一个C++控制台应用程序来列出给定目录中的所有文件。我的代码如下,但它总是返回“INVALID\u HANDLE\u TRUE”。我使用了windows.h库,并使用WIN 32 FIND DATA和FindFirstFile函数打开了一个目录,c++,windows,winapi,C++,Windows,Winapi,谢谢 #include <iostream> #include <string> #include <vector> #include <windows.h> using namespace std; int getDirectory(const char *directory, vector<string> &files) { string storage; WIN32_FIND_DATA fd;
#include <iostream>
#include <string>
#include <vector>
#include <windows.h>
using namespace std;
int getDirectory(const char *directory, vector<string> &files)
{
string storage;
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFile((LPCWSTR)directory, &fd);
if (h == INVALID_HANDLE_VALUE)
{
cout << "Invalid handle for: " << directory;
return 0;
}
while(1){
cout << (fd.cFileName) ;
if (FindNextFile(h, &fd) == FALSE)
{
break;
}
}
return 1;
}
int main()
{
vector <string> files;
char *directory;
cout << "Directory: ";
// cin >> directory;
directory ="c:\\*.*";
cout << directory << endl;
getDirectory(directory, files);
for (unsigned int i = 0; i< files.size(); i++)
{
cout << files[i] << endl;
}
cin.ignore();
return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int getDirectory(const char*目录、向量和文件)
{
字符串存储;
WIN32_FIND_DATA fd;
handleh=FindFirstFile((LPCWSTR)目录,&fd);
if(h==无效的\u句柄\u值)
{
cout您的目录
变量的类型为const char*
。我怀疑您是在使用为预处理器定义的UNICODE
进行构建,这意味着FindFirstFile
实际上是FindFirstFile
,即它需要一个const wchar\u t*
尝试将FindFirstFile
更改为FindFirstFileA
,明确请求函数的ANSI变量,该变量将const char*
作为其第一个参数,您不再需要不正确的强制转换。将const char*强制转换为LPCWSTR似乎是错误的?如果我删除该变量,则会产生一个错误。TryFindFirstFileA
用于ANSI版本,或使用wchar将char
转换为wide char
@Yagiz错误就是线索。之后,我的WIN32_FIND_数据在h=FindFirstFileA(目录,&fd)行中给出错误带“&”下划线。错误C2664:findfirstfilea无法将参数2从“LPWIN32\u FIND\u DATAA*”转换为“LPWIN32\u FIN\u DATAA”(其中一个带有星号)。获得此类错误的唯一方法是将变量从WIN32\u FIND\u DATA
更改为LPWIN32\u FIND\u DATA
。如FindFirstFile()
,WIN32\u FIND\u DATA
也有Ansi和Unicode变量。您的声明必须是WIN32\u FIND\u DATAA fd;
,然后使用&fd
将其传递给FindFirstFileA()
。