2009-10-18 38 views
1

我不一定指的是app.configs,而是一个自定义配置文件,只要用户点击“保存”按钮就可以存储我的程序状态。(.Net)关于为程序配置文件的建议?

在我的示例中,它是一个UI构建器,允许用户选择要在两列屏幕的左列和右列显示哪些“字段”,以及每列中字段的顺序。还有其他的东西,但你明白了。

用户可以打开他们保存的任何配置文件并适当地填充UI构建器。

我在想这可能存储在一个XML文件中,但我想知道人们会如何写出来,如何从中读取(使用LINQ也许?)和其他一般方法,包括版本控制等等。我确信这已经出现,我想听听最佳做法。谢谢!

回答

4

我用于我的程序的方法是将我的配置值保存在使用DataSet中的DataTable存储值的类中。当我想保存它时,我将DataSet.WriteXML()用于用户想要的任何文件名。我现在的使用非常简单(一个DataTable与键,值列),但它很容易扩展到多个相关的DataTables与特定列的各种信息。 DataSet处理文件io。

然后用DataSet.ReadXML()重新读入是一件轻而易举的事情。

该方法在序列化类上的一个优点是处理从以前版本的程序中保存的文件要容易得多。您可以在表格中为用于保存的程序版本设置一个值,这样您的较新版本就会知道较旧的文件在新版本中不会添加任何值 - 并且可以正确设置它们以更新文件版。

如果您向类(值,方法)添加新功能,它的序列化文件将与早期版本不同 - 不知道处理这些较旧文件是多么容易。

这是一个简单的example class

像这样来使用,使得file like this

To create a new one: 
     Dim UIcfg As UIsettings = New UIsettings("TestSettings.cfg") 

     UIcfg.setGeneralValue("Version", "1.0.0") 
     UIcfg.setGeneralValue("Author", "Bobs YourUncle") 

     UIcfg.setFieldValues("FirstName", "Left", "1") 
     UIcfg.setFieldValues("LastName", "Right", "1") 
     UIcfg.setFieldValues("ShoeSize", "Left", "2") 
     UIcfg.setFieldValues("ShoeColor", "Left", "3") 

     UIcfg.Save() 

To get values from it: 
     Dim value As String = "" 
     Dim values As String = "" 
     value = UIcfg.getGeneralValue("Author") 
     values = UIcfg.getFieldValues("FirstName") 

代码比试图解释一个概念就轻松多了。 :-)

+0

听起来像一个很好的策略。谢谢! – larryq 2009-10-18 16:59:50

6

它是否必须有些人的可读性?或者用户不在意......只保存我的设置...并让我稍后重新加载它们?

如果没有,只需创建/设计一组具有有意义属性的对象...创建实例...并将对象序列化(二进制或肥皂或自定义)到磁盘。然后,您可以随时从磁盘“重新保存”对象。

如果可能,我总是喜欢不要重新发明轮子。让框架完成这项工作。