如何在C#中将3D字符串数组存储和恢复到文件中?

3
如何在C#中将3D字符串数组存储和恢复到文件中?
您好; 我正在编写一个项目,其中我创建了一个用于公共数组的类,以便我可以在所有表单中使用它们。

class MainArray

{

   // Introduce Moarefi Projeh

   public static string[] MPArray = new string[15];

   // Introduce Moarefi Personel Rozmozd

   public static string[,] MPRArray = new string[20,15];

   // Introduce Moarefi Peymankaran

   public static string[,] MPeymankaranArray = new string[20, 15];

   // Introduce Gozaresh PersonelRozMozd

   public static string[,] GPRMArray = new string[20, 15];

   
   public static string[,,] MArr = new string[20,20,20];

 

}

我在某些表单中保存了所有数据,这些数据都存储在数组中。我想创建一个类,使操作员可以在程序使用结束时将所有这些数组存储到文件中,并在下一次使用程序时恢复这些数据。

您知道这是我的第一个C#编程,请给我一个类代码,让我可以做到这一点。我想要一个类代码,我可以在我的主程序中使用简单的代码,如下所示: MyData.WriteArray(MyArrayName,FileName); 用于存储和 MyData.ReadArray(MyArrayName,FileName); 用于恢复。


1
你想要做的是所谓的序列化。保存文件的格式应该是XML还是二进制? - semao
2个回答

2

以下代码将把类型为MyData的对象保存到二进制文件中:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable()]
public class MyData
{
     private string[,,] SArr;

     public MyData(int sizex,int sizey,int sizez)
     {
        SArr = new string[sizex,sizey,sizez];
     }         
     public MyData(string[,,] data)
     {
        SArr = data;
     }         
     public string this[x,y,z]
     {
        get
        {
            return SArr[x,y,z];
        }
        set
        {
            SArr[x,y,z] = value;
        }
     }
     public void SaveToFile(String fileName)
     {
          Stream TestFileStream = File.Create(fileName);
          BinaryFormatter serializer = new BinaryFormatter();
          serializer.Serialize(TestFileStream, this);
          TestFileStream.Close();
     }

    public static MyData ReadFromFile(String fileName)
    {
        if (File.Exists(FileName))
        {
            Stream TestFileStream = File.OpenRead(FileName);
            BinaryFormatter deserializer = new BinaryFormatter();
            var data = (MyData)deserializer.Deserialize(TestFileStream);
            TestFileStream.Close();
            return data;
        }
        return null;
    }
}

在代码中:

var data = new MyData(4,4,4);
MyData[1,1,0] = "TestData";
data.SaveToFile(@"C:\Test.data");
var data2 = MyData.ReadFromFile(@"C:\Test.data");
//data2[1,1,0] == "TestData"

谢谢你的帮助。这正是我想要的代码,但我无法使用它。我应该在哪里定义和设置我的数据到SArr并将其发送到这个类?我该如何获取我的数据,例如最终我想使用这段代码:txtbox1 = SArr [1,1,1];? - Mehdi Meymari
我更新了答案,包括你所需的内容。但最简单的方法是将SArr修饰符更改为public(然后您可以像data.SArr = new string [4,4,4]一样访问它)。 - semao
@MehdiMeymari 如果Semao的回答解决了你的问题,请不要忘记接受他的答案。 - Antonio Bakula

1

在保存之前,您需要对数组进行序列化。这里是一个可能会帮助您的链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接