-1

小さな問題があります。fstream を使用して Win32 エディット コントロールからテキストを保存しようとしています。私のコード:

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

hello world と入力して保存すると、テキスト ファイルには 001D2F38 などの別の文字列が表示されます。解決策はありますか?

4

1 に答える 1

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();
于 2014-07-08T01:11:21.040 に答える