Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将多维数组导出/写入文件(csv或其他文件)_C#_Arrays_Xna_Xmlserializer_Multidimensional Array - Fatal编程技术网

C#将多维数组导出/写入文件(csv或其他文件)

C#将多维数组导出/写入文件(csv或其他文件),c#,arrays,xna,xmlserializer,multidimensional-array,C#,Arrays,Xna,Xmlserializer,Multidimensional Array,您好,我正在设计一个程序,我只是想就如何将多维数组写入文件提供建议。 我使用的是XNA,有一个多维数组,里面有一个向量3(x,y,z) 如果不是数百万的话,也有十万个值,我希望能够将它们保存在一个文件中(保存游戏级别)。我对一个想法没有偏见,我只需要存储数据…就是这样!所有其他游戏数据,如玩家统计等,我正在使用XMLSerializer及其工作奇迹 现在我经常使用xml序列化程序,并了解到无法导出多维数组。。。如此令人沮丧(但我相信有一个很好的理由——希望如此)。我和杰格一起玩,运气不好 使用S

您好,我正在设计一个程序,我只是想就如何将多维数组写入文件提供建议。 我使用的是XNA,有一个多维数组,里面有一个向量3(x,y,z)

如果不是数百万的话,也有十万个值,我希望能够将它们保存在一个文件中(保存游戏级别)。我对一个想法没有偏见,我只需要存储数据…就是这样!所有其他游戏数据,如玩家统计等,我正在使用XMLSerializer及其工作奇迹

现在我经常使用xml序列化程序,并了解到无法导出多维数组。。。如此令人沮丧(但我相信有一个很好的理由——希望如此)。我和杰格一起玩,运气不好

使用System.IO.File.WriteAllText,然后快速重新设置,这仅适用于字符串。。。达哈

基本上,我认为我需要使用BinaryWrite方法,重新编写自己的序列化程序,甚至尝试运行sql server来承载大量数据。。。愚蠢的想法?请告诉我,你能给我指一下写作的方向吗。由于我主要有web(php)背景,运行同步数据/级别数据的服务器的想法对我很有吸引力。。。但在这里可能不适用

谢谢你所做的一切


Mal

为什么不尝试Json序列化?Json比XML噪音小,写入文件时占用的空间更少,尤其是在不缩进的情况下。根据我的经验,Json在数组、字典、日期和其他对象方面没有问题

我建议使用,如果没有,请查看


如果Json.net发现很难序列化包含许多私有和静态变量的库类,然后,编写一个POCO类并将库类的基本属性映射到您的POCO,然后对POCO进行前后序列化和映射是很简单的。

只要数组中的对象是可序列化的(并且IIRC Vector3是可序列化的),您就可以使用内置的.NET序列化器对这些对象进行序列化


这应该是你想要的一个粗略的模板。

谢谢你的回答,今晚我来看看JSON。好的,并列JSON的文件大小比上面的第一个答案(BinaryFormatter();)小,但它的文件大小仍然相当大。。。需要开始观察按压。再次感谢你的帮助,谢谢你的回应,今晚我将尝试你的方式和Zasz的建议。非常感谢您的快速回答!好的,试过这个方法,效果很好,只有一个问题。。。文件大小为1gb并且正在增长。。。flippen heck。。。可能需要重新考虑像这样存储vector3。假设我正试图输出一个数组为[100005000]的文件Pinteresing,你的主内存不是用完了吗?在这种情况下,请尝试寻找内存占用较少的策略、备选工作流,尤其是评测应用程序。是的,你完全正确,我现在正在重新思考程序运行和存储数据的方式。我曾想过可能会将文件分成块,但实际上这仍然是一个愚蠢的想法,因为文件大小仍然相同,但可能它在不同的时间加载块,等等。。。我想现在我将处理少量的数据集,并让其余的数据在ram中运行。有趣的是,我可以用[100005000]轻松顺利地运行程序。。。考虑到我需要检查ram的使用情况:再次感谢各位,你们帮了我很大的忙
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;
}