“查找第一个文件”始终返回无效的\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似乎是错误的?如果我删除该变量,则会产生一个错误。Try
FindFirstFileA
用于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()