2011-10-12 448 views
0

嗨設計一個程序,我只是想建議寫一個multiDim數組到文件。 我正在使用XNA,並有一個Vector3(x,y,z)的多維數組。C#導出/寫多維數組到文件(csv或其他)

有數十萬如果不是數百萬的值,我想能夠將它們保存在文件中(保存遊戲級別)。我對一個想法沒有偏見,我只需要存儲數據......多數民衆贊成它!所有其他遊戲數據,如球員統計等我使用XMLSerializer及其工作奇蹟。

現在我正在玩xml序列化器很多,並且已經知道你不能導出MultiDim Arrays ...太令人沮喪了(但我確信有一個很好的理由 - 希望)。我跟賈格德一起玩,沒有運氣。

使用System.IO.File.WriteAllText然後迅速relised這只是字符串... daahhh

基本上我想我需要下井的BinaryWrite方法,重新寫我自己的序列,在去嘗試運行一個sql server來託管大量的數據......愚蠢的想法?請告訴我,你能指出我的寫作方向嗎?因爲我主要有一個web(php)背景,所以運行同步數據/級別數據的服務器的想法對我很有吸引力......但可能不適用於此。

感謝什麼,

回答

0

你爲什麼不嘗試JSON序列化? Json與XML相比噪音更小,寫入文件時佔用的空間更少,特別是如果您不使用縮進等方式,那麼它的數組,字典,日期和其他對象沒有問題,就我的經驗而言。

我建議使用JSON.NET如果沒有,再看看this thread

如果Json.net難再序列庫類有許多私人&靜態變量,那麼它是瑣碎寫一個POCO類和地圖圖書館類的基本屬性到您的POCO並序列化和映射POCO來回。

+0

謝謝你的回答,今晚請看看JSON。 – Malaki

+0

好吧並排JSON是較小的文件大小,然後上面的第一個答案(BinaryFormatter();)但它仍然相當大的文件大小...需要開始查看壓縮。再次感謝您的幫助 – Malaki

1

只要數組中的對象是可串行化的(和IIRC Vector3s),就可以使用內置的.NET串行器將其序列化。

void SerializeVector3Array(string filename, Vector3[,] array) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); 
    Stream s = File.Open(filename, FileMode.Create); 
    bf.Serialize(s, array); 
    s.Close(); 
} 

Vector3[,] DeserializeVector3Array(string filename) 
{ 
    Stream s = File.Open(filename, FileMode.Open); 
    BinaryFormatter bf = new BinaryFormatter(); 
    Vector3[,] array = (Vector3[,])bf.Deserialize(s); 
    s.Close(); 
    return array; 
} 

這應該是一個粗略的模板。

+0

感謝您的迴應,我將會嘗試您的方式和今晚Zasz的建議。真的很感謝你的快速回答! – Malaki

+0

好吧,嘗試了這種方式,運行良好,只有一個問題...文件大小爲1GB,並越來越多... flippen heck ...可能需要重新考慮像這樣存儲vector3。鑑於我想輸出一個文件thats數組[10000,5000] ...:P – Malaki

+0

同意的O_O。你如何有這麼多的價值觀? –