Работа с этими безумными строками и массивами вызывает у меня головную боль …
Вот мой код до сих пор
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? Это так сложно использовать и манипулировать.
Спасибо, парни!
использование 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);
Первые две функции Windows API используют переменную LPWSTR. Третий использует LPCWSTR. В чем главное отличие?
LPCWSTR
это const
версия LPWSTR
:
Я хочу создать новый каталог внутри него под названием «тест». Это означает, что мне нужно добавить (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.
}