C++ 具有宽字符和windows函数的cpp问题 静态void GetFilesFromDir(std::string dir、std::vector和items) { WIN32_FIND_DATA findData; HANDLE hFind=FindFirstFile((dir+“\\*”).c\u str(),&findData);//1错误 做 { if(hFind!=无效的句柄值) { std::string sFileName=findData.cFileName;//2错误 LPCSTR lp(sFileName.c_str()); 如果(sFileName==“| | sFileName==”)) {}//什么也不做 else if(findData.dwFileAttributes和文件属性目录) GetFilesFromDir(dir+“\\”+sFileName,items); 其他的 项目。向后推(dir+“\\”+sFileName); } }while(FindNextFile(hFind和findData)); }

C++ 具有宽字符和windows函数的cpp问题 静态void GetFilesFromDir(std::string dir、std::vector和items) { WIN32_FIND_DATA findData; HANDLE hFind=FindFirstFile((dir+“\\*”).c\u str(),&findData);//1错误 做 { if(hFind!=无效的句柄值) { std::string sFileName=findData.cFileName;//2错误 LPCSTR lp(sFileName.c_str()); 如果(sFileName==“| | sFileName==”)) {}//什么也不做 else if(findData.dwFileAttributes和文件属性目录) GetFilesFromDir(dir+“\\”+sFileName,items); 其他的 项目。向后推(dir+“\\”+sFileName); } }while(FindNextFile(hFind和findData)); },c++,C++,这是我从另一个项目到新项目的简单函数。它抛出错误的原因我想不出来,特别是因为它在其他项目中工作 static void GetFilesFromDir(std::string dir, std::vector<std::string>& items) { WIN32_FIND_DATA findData; HANDLE hFind=FindFirstFile((dir+"\\*").c_str(), &findData); //1 error

这是我从另一个项目到新项目的简单函数。它抛出错误的原因我想不出来,特别是因为它在其他项目中工作

static void GetFilesFromDir(std::string dir, std::vector<std::string>& items)
{
    WIN32_FIND_DATA findData;
    HANDLE hFind=FindFirstFile((dir+"\\*").c_str(), &findData); //1 error
    do
    {
        if(hFind != INVALID_HANDLE_VALUE)
        {
            std::string sFileName = findData.cFileName; //2 error
            LPCSTR lp(sFileName.c_str());

            if(sFileName == "." || sFileName == "..")
            {} //do nothing
            else if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                GetFilesFromDir(dir+"\\"+sFileName, items);
            else
                items.push_back(dir+"\\"+sFileName);
        }

    }   while (FindNextFile(hFind, &findData));
}
1>c:\users\prog\documents\visualstudio 2010\projects\vampire steave\vampire steave\smallfunctions.h(22):错误C2664:“FindFirstFileW”:无法将参数1从“const char*”转换为“LPCWSTR”
1> 指向的类型是不相关的;转换需要重新解释转换、C样式转换或函数样式转换
1> c:\users\prog\documents\visual studio 2010\projects\vampire steave\vampire steave\smallfunctions.h(27):错误C2440:“初始化”:无法从“WCHAR[260]”转换为“std::basic\u string”
1> 与
1>          [
1> _Elem=char,
1> _Traits=std::char_Traits,
1> _Ax=std::分配器
1>          ]
1> 没有构造函数可以采用源类型,或者构造函数重载解析不明确
有人知道怎么回事吗?我对此一无所知。

第一个错误:

1>c:\users\prog\documents\visual studio 2010\projects\vampire stealth\vampire    stealth\smallfunctions.h(22): error C2664: 'FindFirstFileW' : cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>c:\users\prog\documents\visual studio 2010\projects\vampire stealth\vampire stealth\smallfunctions.h(27): error C2440: 'initializing' : cannot convert from 'WCHAR [260]' to 'std::basic_string<_Elem,_Traits,_Ax>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Ax=std::allocator<char>
1>          ]
1>          No constructor could take the source type, or constructor overload resolution was ambiguous
第二个错误:

...(dir+L"\\*").c_str()...
我认为您已经为项目设置了UNICODE标志,因此需要使用宽字符。
wchar\u t插入char和wstring而不是string。

std::wstring
包含宽字符。但是我不需要wstring,而且出于某种原因,编译器认为我需要?为什么?你在某处定义了
UNICODE
。你试过使用
FindFirstFileA
吗?@user974967,最好更改#define而不是调用你使用的每个函数的A版本。如何将UNICODE标志更改回正常状态?我用的是VC 2k10。好吧,我在项目的比例中找到了它。
std::wstring wFileName = findData.cFileName;