本文解决编辑框、富编辑控件的内容写入文件时,文本长度太大时写入内容被截断的问题!
读取编辑框内容并写入文件,可能最常用的方法是创建文件,利用GetWindowText, 或GetDlgItemText读取编辑框或富编辑控件(Multiline)的内容到字符串,将字符串buffer写入文件。常见代码如下:
CFile file("temp.txt", CFile::modeReadWrite | CFile::modeCreate|CFile::modeNoTruncate);
CString str;
GetDlgItemText(IDC_EDIT1,str); // 字符串或字符buffer存储上限时3 kB,超过的内容将不会被存储。
file.Write(str, sizeof(str)); // write函数写入的是非NULL终止的数据,会产生乱码。
file.Close();
通过上述常见代码的分析可以看出,当文本长度很大时,问题就会很多。即使在file.Write之前添加str的buffer的终止符('\0'),写入的结果除了截断之外,虽然不会有乱码,但是每个字符后都会加一个空格(项目使用Unicode字符集)。这种现象在file构造函数中加入TypeText及TypeUnicode都不会解决。
正确地从编辑框或富编辑控件读取大容量文本并写入文件的方法是:利用CStdioFile逐行读取文本到字符buffer并写入文件。代码如下:
void CTestDlg::OnClickedBtn1()
{
// TODO: 在此添加控件通知处理程序代码
CRichE