2012-03-26 36 views
1

下面的代碼不能正常工作,因爲我的MFC程序是在unicode的情況下。如何使:: WriteFile在UNICODE環境下工作?

::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr); 
::CloseHandle(hFile); 

結果是「123」,這應該是「123456」

我是Unicode的BOM可以解決這個在互聯網上找到。 所以我修改了我的代碼,如下所示。

WORD Unicode = 0xfeff; // UNICODE BOM 
::WriteFile(hFile, &Unicode, 2, &dwByte, nullptr); 
::WriteFile(hFile, TEXT("123456"), lstrlenW(TEXT("123456")), &dwByte, nullptr); 
::CloseHandle(hFile); 

但是,它並沒有任何區別。

似乎這是一個簡單的問題,但我迷失了尋找解決方案。

任何想法都會比歡迎。提前致謝。

回答

4

Writefile不寫「文本」:寫「字節」。 lstrlenW返回的編號爲wchar_t。 您shold通過sizeof(wchar_t)爲了給第三個參數「的字節數寫」

+0

我很欣賞這個繁殖。謝謝。 – 2012-03-26 06:27:34

+0

'TEXT()'對'char'或'wchar_t'進行操作取決於是否定義了UNICODE,但'lstrlenW()'僅對'wchar_t'進行操作。如果你想讓代碼在兩種環境下運行,可以使用'lstrlen()'和'sizeof(TCHAR)',例如:'WriteFile(hFile,TEXT(「123456」),lstrlen(TEXT(「123456」))* sizeof(TCHAR),...)' – 2012-03-26 15:31:04

+0

@RemyLebeau - 再次...好的! – 2018-01-17 11:44:22

2

你不想使用lstrlenW確定要寫入的數據量 - 你需要告訴WriteFile的字節數寫的代碼點數量不限。現在,你告訴它6,這是足夠的字節3個字符。

+0

謝謝你這麼多 – 2012-03-26 06:24:37