2013-01-17 58 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)); 

至於文件的大小:一些操作系統報告文件的大小分配到磁盤上的文件,該文件是物理塊大小的倍數的空間。所以只要寫入沒有超出塊大小,就不會看到文件大小的增加。

相關問題