我使用CRichEditView写一个文本编辑器,把其中的字符用CString存储起来,并想写入一个纯文本中,可是做了以下操作之后,得到的文件总是带有一个复杂的乱码的开头,请问该怎么办啊?
void CLispEditorDoc::Serialize(CArchive& ar)
{
POSITION pos = GetFirstViewPosition();
CRichEditView* pFirstView =(CRichEditView*) GetNextView( pos ); CRichEditCtrl *pCtrl = &pFirstView->GetRichEditCtrl();
pCtrl->GetWindowText(m_text);
// AfxMessageBox(m_text);

if (ar.IsStoring())
{
ar<<m_text;// TODO: add storing code here
}
else
{
ar>>m_text;// TODO: add loading code here
} // Calling the base class CRichEditDoc enables serialization
//  of the container document's COleClientItem objects.
// TODO: set CRichEditDoc::m_bRTF = FALSE if you are serializing as text
        CRichEditDoc::m_bRTF = FALSE;
CRichEditDoc::Serialize(ar);}

解决方案 »

  1.   

    首先提出你的代码不安全,指针都没加判断
    m_text是否初始化了
    你弹出MessageBox是否是正确的结果
      

  2.   

    m_text是我在Document类中定义的一个成员,应该没有什么问题。是不是CRichEditDoc::Serialize(ar)这个函数输出文件的时候本来就带有一个文件头啊?
    后来我将代码改成:
    void CLispEditorDoc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {}
    else
    {}// Calling the base class CRichEditDoc enables serialization
    // of the container document's COleClientItem objects.
    // TODO: set CRichEditDoc::m_bRTF = FALSE if you are serializing as text
    CRichEditDoc::m_bRTF = FALSE;
    CRichEditDoc::Serialize(ar);}与上次的效果几乎一样,无语了。
    如果在ClassWizard中将Serialize函数删掉,自己重载OnCloseDocument与OnOpenDocument行不行啊?