2014-07-08 55 views
-1

我有一個小問題。我正嘗試使用fstream從Win32編輯控件中保存一些文本。我的代碼:文件不保存lpstr內容

LPTSTR text = L""; 
ofstream file; 
GetDlgTextItem(hWnd, EDIT_MAIN, text, UINT_MAX); 
file.open(filePathName); 
file << text; 
file.close() 

如果我輸入hello world並保存它,文本文件會顯示其他內容,如001D2F38。任何解決方案

+0

你'LPTSTR'被編譯成'LPWSTR' 。歡迎使用Unicode。 –

+0

所以....有什麼建議嗎? – Forrest4096

回答

1

您需要分配內存來接收文本,並且您需要確保文本緩衝區的數據類型與用於寫入文件的數據類型相匹配。兩者都不是你正在做的。

嘗試更多的東西是這樣的:

HWND hEdit = GetDlgItem(hWnd, EDIT_MAIN); 
int len = GetWindowTextLengthA(hEdit); 
std::vector<CHAR> text(len+1, 0); 
GetWindowTextA(hEdit, &text[0], len); 
ofstream file; 
file.open(filePathName); 
file << &text[0]; 
file.close(); 

或者:

HWND hEdit = GetDlgItem(hWnd, EDIT_MAIN); 
int len = GetWindowTextLengthW(hEdit); 
std::vector<WCHAR> text(len+1, 0); 
GetWindowTextW(hEdit, &text[0], len); 
wofstream file; 
file.open(filePathName); 
file << &text[0]; 
file.close(); 

還是更喜歡這樣的東西,甚至:

HWND hEdit = GetDlgItem(hWnd, EDIT_MAIN); 
int len = GetWindowTextLengthW(hEdit); 
std::vector<WCHAR> text(len+1, 0); 
GetWindowTextW(hEdit, &text[0], len); 

int len2 = WideCharToMultiByte(CP_UTF8, 0, &text[0], len, NULL, 0, NULL, NULL); 
std::vector<char> utf8(len2+1, 0); 
WideCharToMultiByte(CP_UTF8, 0, &text[0], len, &utf8[0], len2, NULL, NULL); 

ofstream file; 
file.open(filePathName); 
file << &utf8[0]; 
file.close();