2014-12-25 88 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

除了其他所有內容之外,這裏還有一個更基本的問題:不能依賴spool文件夾始終在該位置 - 對於初學者來說,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只是w_char *的typdef。所以如果你諮詢MSDN,你會看到:

typded wchar_t* LPWSTR; 

這裏的w_char *表示你的字符串將被編碼爲UNICODE而不是ANSI方案。所以在Windows下,一個UNICODE字符串將是一個UTF16字符串(每個字符2個字節)。

std :: wstring也是std :: basic_string的一個typedef <wchar_t,char_traits<>>所以通過將您的輸入聲明爲wstring並調用wasting.c_str(),它將執行這些操作。

+0

這很好解釋爲什麼這些代碼行解決OP問題。 –

+0

@ruffp好的我更新了我的答案 –

+1

std :: wstring(「test.SPL」)**不工作。實際上,該構造函數在標準庫中不存在。也許你想使用'std :: wstring(std :: begin(myStr),std :: end(myStr));',或者,更簡單地說,只需在字符串前面加一個'L'即可。另外,你在使用'std'前綴時不一致,並且忘記在第二個字符串中轉義反斜槓。也許提到使用原始字符串以避免最後一個問題會很有用。 – bogdan

2

只是爲了說明,LPWSTR是一個wchar_t*的typedef。您可以使用wcscat_s來簡化此表單的字符串。你的一個char*字符串應該只是改變爲相同的類型,因爲你有它在那裏作爲一個簡單的文字(只是在文字前綴L並更改聲明的類型)。但是,由於您將此標記爲C++,因此可以使用std::wstring類更簡單地完成所有這些操作。