2013-01-17 61 views
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(); 

我退出时观看过该文件,大小也没有增加(假设我它没有写)。我做错了什么?

+0

http://en.wikipedia.org/wiki/Serialization –

+0

'我在退出时看过文件,大小根本没有增加,只关注文件大小,甚至不打开它? – billz

+0

http://www.boost.org/doc/libs/1_52_0/libs/serialization/doc/index.html – imreal

回答

0

myPlayer是一个指向LivingObject

myWrite.write((char*)myPlayer,sizeof(myPlayer));这条线,你把指针转换为另一种指针,然后称的sizeof指针类型(通常是4)。所以你会写4个字节的数据(地址),而不是对象。

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

0

在网页中搜索“boost serialize”。您正在执行的操作称为序列化。

如果您想要在不同平台之间共享数据,您需要选择非二进制格式或写下格式的格式,请务必提及哪些多字节小数位是Little Endian或Big Endian。

1

该代码只写入对象的前4个字节(或8个64位)字节而不是整个对象。写全对象使用:

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

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

相关问题