关于C++将对象存储到硬盘中的问题

abc41106 2010-03-09 10:10:08
请问大家,我创建了一棵B-树,想在最后把这棵树保存到硬盘,以便下次直接读取这棵树进行操作,我该怎么做?诚请指教!!!!!
...全文
433 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
SuperLy 2010-03-10
  • 打赏
  • 举报
回复
就是把那个需要保存的对象序列化;
更易懂一点就是把整个对像(或需要保存的所有数据)放置到一段连续的内存空间中,比如一个足够大的数组空间,然后保存到磁盘。
所以,如果你的对像里面用了new操作,就必须把new出来的非连续空间中的数据一一转移到一个连续空间中去才行。
macrojj 2010-03-10
  • 打赏
  • 举报
回复
用你自己定义的方法读进去。然后用反方法读出来。
序列化就是用你的方式,写和读。
abc41106 2010-03-10
  • 打赏
  • 举报
回复
对不起,我说的是自己那个方法,没想到你回复的那么快!
abc41106 2010-03-10
  • 打赏
  • 举报
回复
上面读出的方法不行,能不能把读出的方法也给出来,非常感激!
yuzl32 2010-03-10
  • 打赏
  • 举报
回复
引用 9 楼 abc41106 的回复:
如果读出t是不是
FILE *fp;
fp=fopen("xxx.dat","w+b");
TwoThree *t;
t=getc(ft);
fclose(fp);
第四句是否正确?

TwoThree *t = (TwoThree *)malloc(sizeof(TwoThree));
FILE *fp = fopen("xxx.dat","r+b");
fread(t,sizeof(TwoThree),1,fp);
fclose(fp);
abc41106 2010-03-10
  • 打赏
  • 举报
回复
如果读出t是不是
FILE *fp;
fp=fopen("xxx.dat","w+b");
TwoThree *t;
t=getc(ft);
fclose(fp);
第四句是否正确?
yuzl32 2010-03-10
  • 打赏
  • 举报
回复
TwoThree *t=new TwoThree
//针对t各种赋值操作
... ...

FILE *fp = fopen("xxx.dat","w+b");
fwrite(t,sizeof(TwoThree),1,fp); //注意:这里只存储了一个TwoThree对象.
fclose(fp);
abc41106 2010-03-10
  • 打赏
  • 举报
回复
能不能给点详细的事例,比如
TwoThree *t=new TwoThree;(TwoThree是我定义的B-树)
当程序结束时,我想把构造之后的t保存下来
等到第二次运行程序时直接读出以构造好的t。


请各位帮帮忙,我很急!
分我一定会给,如果答案满意,我会加分的!
先谢了
abc41106 2010-03-09
  • 打赏
  • 举报
回复
有没有像Java 一样直接存储进二进制文件的方法啊?
野男孩 2010-03-09
  • 打赏
  • 举报
回复
把树中的节点按前序遍历所有节点,把每个节点的内容按结构体写入文件,然后再中序写一遍,读出来后就能重新构建树了,比较麻烦。

还可以按层遍历,需要做一些额外的标记,按XML写也行。
SammyLan 2010-03-09
  • 打赏
  • 举报
回复
最简单的方法是定义成xml格式写出去了
wuyu637 2010-03-09
  • 打赏
  • 举报
回复
上网搜c++对象序列化。


其实说穿了就是你要定义一套保存b树的方式,然后定义一套由你定义的方式能够重构出这个b树的构造过程。



java在这个方面做的比较好,很多现成的东西,c++就只能自己写了。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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