0

好吧,我有一个对象:

LivingObject* myPlayer=new LivingObject(...);

我想在退出时将其写入文件。这是我到目前为止所拥有的:

std::fstream myWrite;
myWrite.open("Character.dat",std::ios::binary|std::ios::app);
myWrite.write((char*)myPlayer,sizeof(myPlayer));
myWrite.close();

退出时我查看了文件并且大小根本没有增加(我假设它没有写入)。我做错了什么?

4

3 回答 3

1

此代码仅将对象的前 4 个(或 64 位中的 8 个)字节写入文件而不是整个对象。要编写整个对象,请使用:

myWrite.write((char*)myPlayer,sizeof(LivingObject));

至于文件的大小:一些操作系统将文件大小报告为磁盘上分配给文件的空间,是物理块大小的倍数。因此,只要写入没有超过块大小,您就不会看到文件大小的增加。

于 2013-01-17T21:53:46.833 回答
0

myPlayer是一个指针LivingObject

myWrite.write((char*)myPlayer,sizeof(myPlayer));这一行,您将一个指针转换为另一个指针,然后说出指针类型的大小(通常为 4)。因此,您将写入 4 个字节的数据(地址),而不是对象。

因此,您需要做的是将类序列化为二进制打包格式或其他格式(XML、JSON 等),然后将其写入文件。

于 2013-01-17T21:41:21.490 回答
0

在网上搜索“增强序列化”。您正在执行的操作称为序列化。

如果要在平台之间共享数据,则需要选择非二进制格式或记下格式,请务必提及哪些多字节数量是 Little Endian 或 Big Endian。

于 2013-01-17T21:41:36.897 回答