查找第一个文件总是返回INVALID_HANDLE_TRUE

Find First File always returns INVALID_HANDLE_TRUE

本文关键字:INVALID HANDLE TRUE 返回 第一个 文件 查找      更新时间:2023-10-16

我正在编写一个c++控制台应用程序,以列出给定目录中的所有文件。我的代码如下,但它总是返回"INVALID_HANDLE_TRUE"。我使用windows.h库并使用win32查找数据和FindFirstFile函数打开目录

谢谢!

#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;
}

您的directory变量类型为const char *。我怀疑您正在构建为预处理器定义的UNICODE,这意味着FindFirstFile实际上是FindFirstFileW -即它期望const wchar_t *

尝试将FindFirstFile更改为FindFirstFileA,显式地请求该函数的ANSI变体,该函数将const char *作为其第一个参数,您不再需要错误的类型转换。