Как объединить строки char * и LPWSTR?

Я хочу использовать функцию MoveFile, эта функция использует два аргумента LPWSTR, но у меня есть один символ * и LWSTR, как их объединить?

//move file
LPWSTR latestFile = L"test.SPL";
char*  spoolFolder = "C:\\Windows\\System32\\spool\PRINTERS\\";
LPWSTR fileToMove = spoolFolder + latestFile;
BOOL moved = MoveFile(latestFile, L"C:\\UnprocessedFiles\\" + latestFile);

0

Решение

std::wstring latestFile = wstring("test.SPL");
std::wstring spoolFolder = wstring("C:\\Windows\\System32\\spool\PRINTERS\\");
std::wstring fileToMove = spoolFolder + latestFile;
BOOL moved = MoveFile(latestFile.c_str(), fileToMove.c_str());

На самом деле LPWSTR — это просто typedef для w_char *. так что, если вы обратитесь к MSDN, вы увидите, что:

typded wchar_t* LPWSTR;

здесь w_char * означает, что ваша строка будет закодирована как UNICODE, а не как схема ANSI. Таким образом, в Windows строка UNICODE будет UTF16 (2 байта на каждый символ).

std :: wstring также является typedef для std :: basic_string<wchar_t,char_traits<>> поэтому, объявив ваши входные данные как wstring и вызвав wasting.c_str (), это сделает все.

1

Другие решения

Просто для пояснения, LPWSTR является typedef для wchar_t*, Ты можешь использовать wcscat_s объединить строки этой формы. Ваш один char* Строка должна быть просто изменена, чтобы иметь один и тот же тип, так как она у вас есть в качестве простого литерала (просто добавьте литерал к L и изменить заявленный тип). Поскольку вы пометили это как C ++, вы можете сделать все это проще, используя станд :: wstring учебный класс.

2

По вопросам рекламы [email protected]