当我创建了一个CArchive类对象ar,并且与相关的文件也联系上了,文件里也写入了数据,我用Serialize来存储文件时它抛出一个异常,我想问一下,抛出异常的原因。

解决方案 »

  1.   

    //my code:
    CFile file;
    if(!file.Open(FilePath,CFile::modeRead|CFile::typeBinary))
    return;
    CArchive ar(&File,CArchive::store);
    ar<<...
    you can use try catch...
      

  2.   

    //my code:
    CFile file;
    if(!file.Open(FilePath,CFile::modeCreate|CFile::modeWrite))
    return;
    CArchive ar(&File,CArchive::store);
    ar<<...
    ar.close();
    file.close();
    you can use try catch...
      

  3.   

    要用到两个宏,具体什么的我忘了,
    一个好象是DECLARE_SERIAL 用在声明文件中
    另一个好像是IMPLEMENT_SERIAL 用在定义文件中
    两个都有参数的,你查一下msdn
      

  4.   

    你们说的,在CMarkFont类中都有,我在另一个程序中也用到了CMarkFont类,也用到了pMarkFont->Serialize( *ar ),只是在那个程序中我是用来读数据,结果程序是对的,
    //my code
    CMarkFont *pMarkFont = new CMarkFont;
    CFile file;
    CArchive *ar=NULL;
    try
    {
    if(!file.Open(FileName, CFile::modeCreate || CFile::modeWrite))
    MessageBox(NULL, "打开文件出错", "警告", MB_OK);
    ar = new CArchive( &file, CArchive::store);
    }
    catch(...)
    {
    AfxMessageBox( "转换失败!" );
    file.Abort();
    if ( ar ) ar->Abort();
    delete ar;
    return false;
    }
    .......
    pMarkFont->AddChar(pMarkChar);
    try
    {
    pMarkFont->Serialize( *ar );
    }
    catch( ... )
    {
    MessageBox(NULL,  "转换失败", "警告", MB_OK );
    if ( ar ) ar->Abort();
    delete ar;
    file.Close();
    return false;
    }....
    ...
      

  5.   

    Serialize 会throw CFileException,CArchiveException,cMemException;
    你可以这样写:
    TRY
    {
    pMarkFont->Serialize( *ar );
    }
    CATCH(CFileException, e)
    {
             TCHAR   szCause[255];
             e->GetErrorMessage(szCause,255);
    MessageBox(NULL,  szCause,"警告", MB_OK );
    }
    AND_CATCH(CArchiveException, e)
    {
             TCHAR   szCause[255];
             e->GetErrorMessage(szCause,255);
    MessageBox(NULL,  szCause,"警告", MB_OK );
              }
              END_CATCH