提问关于ar<<与file.write()

sdcer777 2003-09-14 12:45:14
1、《深入浅出mfc》第381页在讲台面下的写文件秘密,有一个现象想请教各位,就是如标题所示,既然<<相当于向文件写入,那为什么侯sir的函数中不全用ar<<,而是有的用ar<<,有的用write()(或WriteCount)?如下:
void CObList::Serialize(&ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
{
ar.WriteCount(m_nCount)//为什么不用ar<<m_nCount??
...
ar<<pNode->data;//这里为什么可以用ar<<??
..
}//此类现象还体现在page383中CRuntimeClass::Store()中。请大家指点
2、还有一个问题就是在定义DECLARE_SERIAL()时,如下:
#define DECLARE_SERIAL(class_name)
DELARE_DYNCREATE(class_name)
friend CArchive& AFXAPI operator>>(CArchive&ar,class_name*&pOb);//完

//为什么只定义了>>而没有定义<<呀??请指点
...全文
76 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mfcdeclare 2003-09-17
  • 打赏
  • 举报
回复
二者没有什么区别,只是写法不同,试问,吃玉米可以解饿,吃米饭就不可以吗?
lionqiang 2003-09-15
  • 打赏
  • 举报
回复
我也不知道,我序列化老是出错,要么尤其是涉及到float或char等出现乱码,其它则是ASCII
方式显示,怎么让他正常,至少应该读出来正常,可就是办不到?怎么回事呢?
所以我到现在还是用普通的FILE和CFILE读写,好在文件不大

我也需要帮帮忙!有劳有劳....!
sdcer777 2003-09-15
  • 打赏
  • 举报
回复
唉,他是不是两种写入文件的方法都试一下才这么写的呢?有的用序列化,有的用流式文件的原始写法呀?不知道啊。。。还是另有用意?
hswjt 2003-09-15
  • 打赏
  • 举报
回复
不知道
sdcer777 2003-09-15
  • 打赏
  • 举报
回复
我觉得也是去持的,
CArchive类明明写着呢!CArchive& operator<<(int i);那为什么?
我的这两个问题竟然没有一个人会回答吗??两天了呀,我一直在等着高人来指点。。。
cernet 2003-09-15
  • 打赏
  • 举报
回复
类CArchive支持
int m_nCount;
ar<<m_nCount;

sdcer777 2003-09-15
  • 打赏
  • 举报
回复
谢谢各位的热心帮助!我再试一下,那么我的第二个问题呢?
yndfcd 2003-09-15
  • 打赏
  • 举报
回复
<<操作符会写入类型信息,而Write函数和WriteCount函数不会。
czlvc 2003-09-15
  • 打赏
  • 举报
回复
这个是不支持int的
你可以自己去实验下啊
sdcer777 2003-09-15
  • 打赏
  • 举报
回复
yndfcd(YNDFCD)说"<<操作符会写入类型信息,而Write函数和WriteCount函数不会。",即使这样的说法正确,也只能说明<<的功能更大些,既然这样,直接写入(即ar<<m_nCount)更应没问题呀,除非<<操作符只能写入类对象这样的东西,而不支持简单类型,而这显然是不可能的。
继续求教!!
blue2moon 2003-09-15
  • 打赏
  • 举报
回复
真感谢楼主提出这个问题!
有是我也想到这个问题,但是却没有深入研究。
序列化这个东东也蛮好玩的,但是用序列化写的文件必须用序列化的方法
读出,这一点让我非常头疼!
sdcer777 2003-09-14
  • 打赏
  • 举报
回复
不是吧,怎么可能不支持int型,刚才我有看了以下,有序列化int型的定义呀!!
czlvc 2003-09-14
  • 打赏
  • 举报
回复
ar.WriteCount(m_nCount)//为什么不用ar<<m_nCount??
//这一点要看m_nCount,是什么类型,如果是int型,就必须这样写
//因为int这个基本类型不支持序列划~~~~~


ar<<pNode->data;//这里为什么可以用ar<<??
//结合上面的答案这里data应该是不是int型,所以可以这样写~~~~~~

//int好象是基本数据类型中唯一不支持序列划的类型~~~~
//不知道我说清楚类没~~~~~
sdcer777 2003-09-14
  • 打赏
  • 举报
回复
为什么没有人回答?我非常想知道!!讲的再清楚一些好吗?
孤必有邻 2003-09-14
  • 打赏
  • 举报
回复
类CArchive用于结构化数据的存储比较方便,该方法使得程序设计者不用关心文件中数据的组织方式,(系统自动加入了一些字节,如'\1',用于识别格式)。
但绝大多数情况下,文件的格式是定义好的,如各种类型的资源文件(bmp,avi,ico,...),这种文件不能够也不需要用结构化存储,只能用Write之类。

16,466

社区成员

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

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

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