2012-04-07 33 views
0

如何储存(保存)一个变量,以便在关闭并再次运行程序后使用它?我无法使用saveFileDialog,因为它是2D数组。其他程序有其自己的扩展名。我也可以自己做扩展吗?像“将项目另存为...”。另存为项目

+0

不能保存的变量。 – idish 2012-04-07 11:41:17

+0

@idish - 那该怎么做? – 2012-04-07 11:43:24

+0

为防万一您不知道(因为您询问了有关'制作'的扩展名),文件扩展名只是所使用格式的_indicators_,这样Windows资源管理器就可以更轻松地打开它,并且您可以根据自己的需要实际命名它们。如果我没有记错,Adobe的.AI格式是PDF。为文件分配自己的扩展名只是为了将其与您的程序关联起来,即使它实际上只是一个文本文件或其他东西,也是有用的。 – 2012-04-07 12:40:39

回答

1

如果要将某个对象保存到磁盘,则需要为数据设计一些文件格式,或者使用其中一种现有的通用格式。

在.NET中,可能是最简单的方法是使用the binary formatter做到这一点:

void Save(SomeType obj, string fileName) 
{ 
    using (var stream = File.OpenWrite(fileName)) 
    { 
     var formatter = new BinaryFormatter(); 
     formatter.Serialize(stream, obj); 
    } 
} 

obj对象和所有对象引用它必须是可序列化。大多数原始类型已经是可序列化的,您可以使用the [Serializable] attribute来创建自己的类型。

Load()方法将是类似的,除了将使用File.OpenRead()formatter.Deserialize()

如何选择文件名取决于您,但您肯定可以使用SaveFileDialog

1

.NET中有不同的排列类型。每个人都有其优点和缺点。所以你应该选择一个最适合你的需求。 这是值得花时间,至少得到这些的一般概述。

例如:

最常见的方法是二进制序列化(通过svick提供的),它速度快,低内存占用,但它绝对不够灵活,其他人在可扩展性方面。原因 标准.NET序列化也保存类型信息,这导致与类型保存并且不仅数据的韧性耦合。

在一个前面回答很难解释一切,所以我建议你看看这里

Serialization and Types of Serialization in .Net

好运

+0

这些并不是唯一可能的序列化格式。您也可以使用一些外部库来将对象序列化为JSON或协议缓冲区。也许有很多其他格式我没有听说过。 – svick 2012-04-08 12:01:17

+0

当然,这些是内置的+你有所有其他的第三部分库。 – Tigran 2012-04-08 12:46:28