2014-12-25 2 views
0

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

//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 может находиться на другом диске. –

ответ

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 ok Я обновил свой ответ –

+1

std :: wstring ("test.SPL") ** не работает. Фактически, этот конструктор не существует в стандартной библиотеке. Возможно, вы хотели использовать 'std :: wstring (std :: begin (myStr), std :: end (myStr));', или, проще говоря, просто поставить 'L' перед строковыми литералами. Кроме того, вы не согласны в использовании префикса 'std', и вы забыли избежать обратной косой черты во второй строке. Возможно, было бы полезно упомянуть использование необработанных строк, чтобы избежать этой последней проблемы. – bogdan

2

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

Смежные вопросы