序列化结构

时间:2009-04-01 22:58:43

标签: c++ serialization struct

我正在做一个家庭作业项目,我正在尝试将库存数据存储到文件中。

库存数据大小不应太大,因为从技术上讲,没有人会真正使用它。

我需要将这些内容写入文件:

•项目描述 •手头数量 •批发成本 •零售成本 •添加到库存的日期

我需要创建一个允许我这样做的界面:

•将新记录添加到文件中 •显示文件中的任何记录 •更改文件中的任何记录

结构将是最简单的方法来实现这个imo。如果我能弄清楚如何读取/写入文件结构,这应该非常简单。

如果您能提供一个如何做到这一点的小例子,我将非常感激。

谢谢!

4 个答案:

答案 0 :(得分:2)

问你的老师,你能用升级库吗? 如果是,请阅读boost serilization教程,它包含一个简单的示例:http://www.boost.org/doc/libs/1_38_0/libs/serialization/doc/tutorial.html

但是如果你想了解如何使用文件,你应该在没有任何帮助或提升的情况下完成这项工作。

如果您想使用std :: [io] fstreams,您应该决定支持哪种格式:
- text - 对于这种情况,最好的方法是定义operator<<和运算符>>并用它们来写文件或阅读结构;
- binary - 你的结构应该是POD(普通旧数据)并且不应该包含指针 - 你将使用读写流方法。
二进制文件的示例:
http://www.codeguru.com/forum/showthread.php?t=269648

答案 1 :(得分:2)

如果你不介意真正的低级别,你可以通过将指向结构的指针强制转换为void*并使用sizeof()来获取结构长度来复制结构。 (IIRC是一种向/从文件中转储/读取空缓冲区的方法)


请注意,仅当数据没有指针/引用/等时才会起作用。


我比C ++更喜欢C's IO

typedef struct { int hi; int mon; char[35] dat; } S;

S s;
S arr[22];
int f;

  // write
f = open(/* I forget the args*/);

  // one
if(sizeof(s) != write(f, &s, sizeof(s))) Error();
  // many
if(sizeof(arr) != write(f, arr, sizeof(arr))) Error();

close(f);

  // read
f = open(/* I forget the args*/);

  // one
if(sizeof(s) != read(f, &s, sizeof(s))) Error();
  // many
if(sizeof(arr) != read(f, arr, sizeof(arr))) Error();

close(f);

答案 2 :(得分:1)

IOStream库做到了

  

ofstream类提供了将数据作为输出流写入文件的接口。

     

ifstream类提供了从文件中读取数据作为输入流的接口

编辑 - Example

答案 3 :(得分:0)

我会选择XML;它是结构化的,它是基于文本的,所以你可以用任何文本编辑器来查看它。