Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 序列化结构_C++_Serialization_Struct - Fatal编程技术网

C++ 序列化结构

C++ 序列化结构,c++,serialization,struct,C++,Serialization,Struct,我正在做一个家庭作业项目,我正试图将库存数据存储到一个文件中 库存数据的大小不应该太大,因为从技术上讲,没有人会真正使用它 我需要将这些内容写入文件: •项目说明 •现有数量 •批发成本 •零售成本 •添加到库存的日期 我需要制作一个界面,允许我这样做: •向文件中添加新记录 •显示文件中的任何记录 •更改文件中的任何记录 Struct将是实现这一点的最简单的方法。如果我能想出如何将Struct读/写到文件中,这将非常容易 如果你能提供一个关于如何做到这一点的小例子,我将非常感激 谢谢 我会选择

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

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

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

•项目说明 •现有数量 •批发成本 •零售成本 •添加到库存的日期

我需要制作一个界面,允许我这样做:

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

Struct将是实现这一点的最简单的方法。如果我能想出如何将Struct读/写到文件中,这将非常容易

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


谢谢

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

IOStream库

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

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


编辑-

IOStream库

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

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


编辑-

问你的老师,你能使用boost库吗。
如果是,请阅读boost系列化教程,其中包含一个简单的示例:

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

如果您想使用std:[io]fstreams,您应该决定支持哪种格式:
-文本-对于这种情况,最好的方法是定义操作符>并使用它们将结构写入文件或读取
-二进制-您的结构应该是POD(纯旧数据),不应该包含指针-您将使用读写流方法。
二进制文件示例:

问问你的老师,你能使用boost库吗。
如果是,请阅读boost系列化教程,其中包含一个简单的示例:

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

如果您想使用std:[io]fstreams,您应该决定支持哪种格式:
-文本-对于这种情况,最好的方法是定义操作符>并使用它们将结构写入文件或读取
-二进制-您的结构应该是POD(纯旧数据),不应该包含指针-您将使用读写流方法。
二进制文件示例:

如果您不介意真正的低级别,您可以通过将指向结构的指针投射到
void*
并使用
sizeof()
获取结构长度,将结构进行位复制。(IIRC是一种向文件转储/读取空缓冲区的方法)


注意,只有当数据没有指针/引用等时,这才有效


我更喜欢C++,所以:

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

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



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


注意,只有当数据没有指针/引用等时,这才有效


我更喜欢C++,所以:

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

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




我该怎么做。。。。你能给我举个例子,说明我如何阅读并将其修改成一个文件吗。。。。你们能给我举个例子,说明我如何读取并将其修改为文件吗?我知道如何使用流的“写”功能将结构写入文件。但是你会如何读入它呢?使用ifstream…你会首先使用ifstream读取一个文件,它可以是空的..然后写入同一个文件你能给我一个如何执行的示例吗?就一个小的?很好的链接,这对我帮助很大。现在我只想看看你们提供的这个例子是否有效,我想看看你们如何使用流的“write”将一个结构写入一个文件。但是你会如何读入它呢?使用ifstream…你会首先使用ifstream读取一个文件,它可以是空的..然后写入同一个文件你能给我一个如何执行的示例吗?就一个小的?很好的链接,这对我帮助很大。现在我只想看看你提供的这个例子是否有效。不,我认为他不想让我们使用任何额外的图书馆。我打算自己做这件事,我只需要了解如何读写结构或XML的文件!!!除了结构的原始转储,使用某种lib比使用自己的lib更容易。在生活中,通常使用精心设计的第三方lib来代替它更容易、更好。但是如果你想了解低级的,你必须使用std::[io]fstreams。好的,我会看看我能用它们做些什么。我只是希望有人给我一个如何使用它们的例子!不,我想他不想让我们使用额外的图书馆。我打算自己做这件事,我只需要了解如何读写结构或XML的文件!!!除了结构的原始转储,使用某种lib比使用自己的lib更容易。在生活中,通常使用精心设计的第三方lib来代替它更容易、更好。但是如果你想了解低级的,你必须使用std::[io]fstreams。好的,我会看看我能用它们做些什么。我只是希望有人给我一个如何使用它们的例子!我真的很喜欢你的主意。你能提供一个简短的例子说明如何做到这一点吗?@BCS:ANSI/isoc的IO是“fopen”、“fread”、“fwrite”open、read、write是POSIX/K&R C。噢,“open”看起来像“open”(“newfile.dat”、O|CREAT | O|u BINARY)”或“open”(“log.txt”、O|RDONLY | O|u TEXT)”。那么简单吗?如果整数值是250259而不是2509,si会不会
  // 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);