3

处理这些疯狂的字符串和数组让我头疼……

到目前为止,这是我的代码

wchar_t mypath[MAX_PATH];
wchar_t temppath[MAX_PATH];

GetModuleFileName(0, mypath, MAX_PATH);
GetTempPath(MAX_PATH, temppath);
CreateDirectory(???, NULL);

前两个 Windows API 函数使用 LPWSTR 变量。第三个使用 LPCWSTR。主要区别是什么?获得 TEMP 目录的路径后,我想在其中创建一个名为“test”的新目录。这意味着我需要将 (L"test") 附加到我的“temppath”变量中。有人可以给我一些关于如何使用这些数组的提示。这就是让 C++ 变得痛苦的原因。为什么每个人都不能只选择一种字符串数据类型。wchar_t 有什么用?它很难使用和操作。

多谢你们!

4

2 回答 2

6

前两个 Windows API 函数使用 LPWSTR 变量。第三个使用 LPCWSTR。主要区别是什么?

LPCWSTR是一个const版本LPWSTR

  • 来自LPCWSTR

    typedef const wchar_t* LPCWSTR; 
    
  • LPWSTR

    typedef wchar_t* LPWSTR, *PWSTR;
    

我想在其中创建一个名为“test”的新目录。这意味着我需要将 (L"test") 附加到我的“temppath”变量中。

使用std::wostringstream

std::wostringstream wos;
wos << temppath  << L"\\test";
std::wstring fullpath(wos.str());

或者只是一个std::wstring(正如克里斯在评论中所建议的那样):

std::wstring fullpath(std::wstring(temppath) + L"\\test");

产生一个连接的版本。然后c_str()用作 的参数CreateDirectory()

if (CreateDirectory(fullpath.c_str(), NULL) ||
    ERROR_ALREADY_EXISTS == GetLastError())
{
    // Directory created or already existed.
}
else
{
     // Failed to create directory.
}
于 2013-07-05T20:15:19.670 回答
4

使用PathCombine(),例如:

wchar_t temppath[MAX_PATH+1] = {0};
GetTempPath(MAX_PATH, temppath);

wchar_t mypath[MAX_PATH+8] = {0};
PathCombineW(mypath, temppath, L"test");

CreateDirectoryW(mypath, NULL);
于 2013-07-05T20:18:37.520 回答