Как использовать FindFirstFile
Я продолжаю получать ошибки компиляции со строкой внизу
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);
1 ответ
Типы данных WinAPI - прекрасные короткие сокращения. LPCWSTR
это сокращение от:
Long
Pointer to the start of
Const
Wide
STRing
Таким образом, это указатель (длинные указатели являются историей) на первый символ строки const wide (const wchar_t*
), то есть вы должны использовать std::wstring::c_str()
вместо std::string::c_str()
,
Примечание: просто обязательно #define UNICODE
везде, где вы используете WinAPI, в противном случае вы получите другие ошибки о преобразовании в LPCSTR
, В качестве альтернативы, явно используйте W
версии функций WinAPI, где они существуют.