无法将整个项目更改为unicode。
void CreateDir(string dirname)
{
char my_dir[247];
WCHAR wcmy_dir[UNLEN+1];sprintf_s(my_dir, dirname.c_str());
MultiByteToWideChar(CP_ACP, 0, my_dir, (int)strlen(my_dir)+1, wcmy_dir,
sizeof(wcmy_dir)/sizeof(wcmy_dir[0]));
CreateDirectory(wcmy_dir, NULL);
}
答案 0 :(得分:0)
您的项目未配置为使用Unicode,因此CreateDirectory()
将映射到CreateDirectoryA()
而不是CreateDirectoryW()
,就像您的代码所假定的那样。将WCHAR
字符串传递给CreateDirectoryA()
确实是错误。
由于您实际上并未呼叫CreateDirectoryW()
,因此根本不需要呼叫MultiByteToWideChar()
。只需显式调用CreateDirectoryA()
,并按原样传递您的输入string
:
void CreateDir(string dirname)
{
CreateDirectoryA(dirname.c_str(), NULL);
}
内部,它将使用char
将WCHAR
数据转换为CP_ACP
,然后为您调用CreateDirectoryW()
。
如果您决定更新项目以使用Unicode,但不将函数更改为使用wstring
,则相同的代码将仍然有效而无需更改。
如果您决定更改功能以改为使用wstring
,只需显式调用CreateDirectoryW()
即可进行匹配:
void CreateDir(wstring dirname)
{
CreateDirectoryW(dirname.c_str(), NULL);
}