好吧,我有一个对象:
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 :(得分: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。