作者march20 ()
看板Programming
标题Re: [c++] 请高手帮帮我~如何将物件写入档案内
时间Sat Jul 8 03:28:38 2006
※ 引述《[email protected] (薛丁格的猫)》之铭言:
: ※ 引述《[email protected]》之铭言:
: > 不是很懂你想要做什麽, 请先举个简单的例子说明一下, 这样才能帮上忙 @@
: > 我猜你是想问, 有没有办法开个 binary file,
: > 然後有个 function 可以帮你把 map 的内容写到这档案去?
: > 如果是这样, 那你只能硬干了.
: > 请用 iterator 将 map 的内容一笔一笔写到档案吧.
: > (读取时, 一笔一笔读进来放回 map 去)
: > 之所以会这样, 是因为开发 compiler 的各家公司对 STL 的实作不同,
: > physical layout 当然也就没统一标准,
: > 更别提统一的标准来输入输出 map 的内容了.
: > (btw, 如果是 java 就简单多了, 因为 java 提供 persistent storage @@)
: 抱歉 没把问题说清楚
: 若有一个 structure 如下
: struct obj{
: map<string,string> foo;
: map<string, map<string,int> > foo_2;
: string foo_3;
: }ex;
: 某段程式码如下:
: ofstream WriteFile("test.dat",ios::binary);
: [processing code]
: WriteFile.close();
: 我的问题是 如何在[processing code]这边 将ex的所有内容存到 test.dat 里面.
: 有没有简单容易的方式 将 ex 的记忆体内容 写到 test.dat
: 反过来, 读取的时候 将 test.dat 的内容 直接搬到 ex.
没有, 原因就像之前说的.
: 我提供一个暴力的方法
只能这样做.
: 这个问题可以用硬干的方法, 也就是将 ex 的每个member 的每一笔资料慢慢写入
: 但是写好之後 要读取时
: 我不知道 foo 的资料是否读完了 而要开始读 foo_2 或是 foo_3 的资料
所以你要提供额外的资讯.
比如在输出 foo 前, 先输出一个 integer, 用来表示该 map 的资料笔数.
同理, 输出 foo2, foo3 前, 先输出 integer, 代表 foo2 的资料笔数及 foo3 的长度
可用的方法还有很多, 像是用 marker 标出该 field 的范围,
(原理跟 C 里的表示 string literal 语法类似)
: 因为没法判定 所以卡住了 ^^
: 还是请各位高手帮小弟的忙 谢谢 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 71.137.87.35