2011-10-12 447 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。你如何有这么多的价值观? –