Я хочу использовать функцию MoveFile, эта функция использует два аргумента LPWSTR, но у меня есть один char * и 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 является только typdef для w_char *. поэтому, если вы обратитесь к MSDN, вы увидите следующее:
typded wchar_t* LPWSTR;
здесь w_char * означает, что ваша строка будет кодироваться как UNICODE, а не ANSI-схема. Таким образом, под окнами строка 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++, вы можете сделать все это проще, используя класс std :: wstring.