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

0

Я хочу использовать функцию 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);
  • 0
    Помимо всего остального, здесь есть более фундаментальная проблема: вы не можете полагаться на то, что папка спула всегда находится в этом месте - для начала каталог Windows может находиться на другом диске.
Теги:
string-concatenation
lpwstr

2 ответа

1
Лучший ответ
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(), это будет делать вещи.

  • 0
    Было бы хорошо объяснить, почему эти строки кода решают вопрос OP.
  • 0
    @ ruffp хорошо, я обновил свой ответ
Показать ещё 3 комментария
2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню