我有這兩個結構,我需要存儲在文件中。我找不到一個很好的方法來將它們解析成一個文件,而不用解析這個結構體,並將它寫成一個文本文件,這比我想要的效率低得多。將最基本的結構轉換爲文件的最簡單方法是什麼?結構是低於如何將結構存儲在文件中以輕鬆重新加載?
struct object
{
unsigned short id;
float x;
float y;
unsigned short type;
unsigned char flags;
};
struct sector
{
unsigned long id;
unsigned long neighbors[4]; // North,East,South,West
std::vector<object> objects;
};
我試過下面的代碼寫入到一個文件的結構,但它不工作得很好。執行後文件的大小隻有4.7kb,但它應該大得多。
sector s;
object o;
s.id = 1;
s.neighbors = {2, 3, 4, 5};
o.id = 1; o.x = 2.0f; o.y = 3.0f; o.type = 4; o.flags = 6;
for(int i = 0; i < 65536; i++)
{
s.objects.push_back(o);
o.id += 1; o.x += 1.0f; o.y += 1.0f; o.type += 1; o.flags += 1;
}
ofstream os("world.dat", ios::binary|ios::out);
s.objects.resize(s.objects.size());
int size = s.objects.size() * sizeof(object);
os.write((char*)&size, sizeof(int));
os.write((char*)&s, size);
os.close();
有什麼建議?
您是否嘗試輸出將內存直接保存到磁盤?例如,從`&o`到`byte`數組的`memcpy`,並將其保存爲二進制數據到磁盤 – Itsik 2010-12-21 20:38:04
那麼如果它只有4.7kb?你有沒有試過從磁盤讀回它,看它是否有效?如果是,你就設置好了。 – 2010-12-21 20:41:21
@Itsik基本上就是他沒有將數據複製到內存中的差異位置。 – 2010-12-21 20:41:54