我一直在尝试将我的C ++程序中的文件路径(例如“D:\ Data \ set_1 \ got.bin”)转换为wstring(因为我想使用CreateFile()
打开文件。但是我遇到了一些困难。我使用的是以下从stackoverflow上的一个问题中收集的版本: -
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf2 = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf2, len);
std::wstring r(buf2);
delete[] buf2;
return r;
}
不幸的是,它没有运作。如果我只传入一个没有完整路径的文件名,它就可以工作。所以我的猜测是我使用的wstring转换函数无法处理":"
,"/"
等字符。是这样的吗?如果是这样,我怎么能修复上述功能来处理这些事情?
编辑:
目前这是该功能的使用方法: -
string convLPCWSTRtoString(LPCWSTR wString)
{
wstring tempWstring(wString);
string tempString(tempWstring.begin(), tempWstring.end());
cout << tempString;
return tempString;
}
int main(int argc, char *argv[])
{
std::wstring stemp = s2ws(argv[1]);
LPCWSTR test = stemp.c_str();
convLPCWSTRtoString(test);
testfile = CreateFile(test, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
// Some reading and processing of the data here
return;
}
我将该函数称为
reader.exe“D:\ Data \ set_1 \ got.bin”
convLPCWSTRtoString()函数中的print语句打印几个乱码字符。如果我将exe复制到同一个文件夹,然后只给出参数“got.bin”,它会正确打印,我也可以读取该文件。