文件不保存lpstr内容

时间:2014-07-08 00:47:32

标签: c++ file io fstream lpstr

我有一个小问题。我试图使用fstream从Win32编辑控件保存一些文本。我的代码:

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

如果我键入hello world并保存,则文本文件会显示其他内容,例如001D2F38。有解决方案吗

1 个答案:

答案 0 :(得分: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();