Я хочу использовать функцию 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);
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 (), это сделает все.
Просто для пояснения, LPWSTR является typedef для wchar_t*
, Ты можешь использовать wcscat_s объединить строки этой формы. Ваш один char*
Строка должна быть просто изменена, чтобы иметь один и тот же тип, так как она у вас есть в качестве простого литерала (просто добавьте литерал к L
и изменить заявленный тип). Поскольку вы пометили это как C ++, вы можете сделать все это проще, используя станд :: wstring учебный класс.