【问题标题】:How to use FindFirstFile [duplicate]如何使用 FindFirstFile [重复]
【发布时间】:2017-10-09 00:49:05
【问题描述】:

我不断收到底部行的编译错误

hFind = FindFirstFile(fileFilter.c_str()), &FindFileData); 

编译器不断抛出error C2664 back at me, : cannot convert argument 1 from 'const char *' to 'LPCWSTR'

如何将 LPCWSTR 创建到 std::string 以传递到 FindFirstFile?

这部分代码供参考。

实际代码如下。

using namespace std;

void GetFileListing(string directory, string fileFilter, bool recursively = true)    
{    
    if (recursively)
        GetFileListing(directory, fileFilter, false);

    directory += "\\";
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind ;
    string filter = directory + (recursively ? "*" : fileFilter);
    string Full_Name;
    string Part_Name;

// the line causing the compile error

    hFind = FindFirstFile(fileFilter.c_str()), &FindFileData);

【问题讨论】:

  • 使用 wstring 代替字符串

标签: c++ pointers stdstring lpcwstr


【解决方案1】:

WinAPI 数据类型是可爱的简短缩写。 LPCWSTR 的缩写:

Long
Pointer to the start of
Const
Wide
STRing

因此,它是指向 const 宽字符串 (const wchar_t*) 的第一个字符的指针(长指针是历史记录),这意味着您需要使用 std::wstring::c_str() 而不是 std::string::c_str()

旁注:请确保在使用 WinAPI 的任何地方都使用#define UNICODE,否则您会收到有关转换为LPCSTR 的其他错误。或者,显式使用存在的 WinAPI 函数的W 版本。

【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2013-02-20
    相关资源
    最近更新 更多