如何将类对象写入文件?

时间:2013-01-17 21:36:10

标签: c++ object file-io

好吧,我有一个对象:

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();

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

myPlayer是指向LivingObject

的指针

myWrite.write((char*)myPlayer,sizeof(myPlayer));这一行,你正在指向另一个指针,然后说一个指针类型的大小(通常是4)。所以你要写4个字节的数据(地址),而不是对象。

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

答案 2 :(得分:0)

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

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