wstring的文件路径

时间:2018-04-06 21:37:35

标签: c++ string type-conversion wstring

我一直在尝试将我的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”,它会正确打印,我也可以读取该文件。

0 个答案:

没有答案