CArchive的ReadObject 和 WriteObject谁用过,问个小问题

joywing 2001-11-15 12:17:22
如果不止存储了一个对象
读完一个紧接着读下一个,要不要自己移动文件指针
另外,和ReadClass、WriteClass到底有什么区别?

...全文
351 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
HeroRose 2001-11-15
  • 打赏
  • 举报
回复
抱歉,输入法有些问题,继续:
WriteClass何WriteObject也是类似的,不过是写
HeroRose 2001-11-15
  • 打赏
  • 举报
回复
CArchive 其实就是个文件的stream,文件读写多个对象时,自动的移动读写指针的.
ReadObject:读入一个类,首先要读入类的基本信息用ReadClass,然后时类中自己定义的数据.
ReadClass:仅仅时读入一个类的基本信息,类如版本,类名之类的.....
WriteClass,Read
  • 打赏
  • 举报
回复
当然不用
HeroRose 2001-11-15
  • 打赏
  • 举报
回复
只是看了写的代码,想当然了,没有上机实现,
1.重写CZone的serialize()函数
2.使你的CZone类实现,DECLARE_SERIAL,IMPLEMENT_SERIAL宏.
3.修改这段的代码:
for(int i=0; i<MAXNUM_ZONE; i++)
{
CZone zone = m_ZoneList.GetZone(i);
arStore.WriteObject(&zone);
}
为:
arStore<<m_ZoneList;
joywing 2001-11-15
  • 打赏
  • 举报
回复
///////////这是读取的
void CTempgkDlg::LoadZoneList()
{
char *zoneFileName = ZONEFILENAME;
CFile zoneFile;
if (zoneFile.Open(zoneFileName, CFile::modeRead) )
{
zoneFile.SeekToBegin();
CArchive arLoad(&zoneFile, CArchive::load);
CZone *zone = NULL;
CButton *ptr = NULL;

for(int i=0; i<MAXNUM_ZONE; i++)
{
zone = (CZone*)arLoad.ReadObject( RUNTIME_CLASS(CZone) );
if(ptr = (CButton*) GetDlgItem(IDC_ZONE1+i))
{
zone->SetButtonPtr(ptr);
}
else
{
AfxMessageBox("加载区域列表时遇到空的按钮指针!");
}
m_ZoneList.AddZone(*zone);
zoneFile.Seek(sizeof(CZone), CFile::current);
}
arLoad.Close();
}
zoneFile.Close();

}

joywing 2001-11-15
  • 打赏
  • 举报
回复
//////这是保存的
void CTempgkDlg::SaveZoneList()
{
char *zoneFileName = ZONEFILENAME;
CFile zoneFile;
if (zoneFile.Open(zoneFileName, CFile::modeWrite) )
{
zoneFile.SeekToBegin();
CArchive arStore(&zoneFile, CArchive::store);
for(int i=0; i<MAXNUM_ZONE; i++)
{
CZone zone = m_ZoneList.GetZone(i);
arStore.WriteObject(&zone);
}
arStore.Close();
zoneFile.Close();
}
else
{
AfxMessageBox("区域文件不存在!");
}
}
HeroRose 2001-11-15
  • 打赏
  • 举报
回复
贴出代码
joywing 2001-11-15
  • 打赏
  • 举报
回复
我试了一下,在一个循环中,只写进去一个对象
文件指针根本没有移动巴

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧