我不一定是指app.configs,而是一个自定义配置文件,只要用户点击“保存”按钮就会存储我的程序状态。
在我的示例中,它是一个UI构建器,允许用户选择在两列屏幕的左右列中显示哪些“字段”,以及每列中字段的顺序。还有其他的东西,但你明白了。
用户可以打开他们保存的任何配置文件,并适当地填充UI构建器。
我认为这可以存储在XML文件中,但我想知道人们对如何写出来有什么样的建议,如何从中读取(可能使用LINQ?)和其他一般方法,包括版本控制等。我确信这已经出现过,我想听听最佳实践。谢谢!
答案 0 :(得分:6)
它是否必须具有人类可读性?或者用户不在乎......只需保存我的设置......让我稍后重新加载它们?
如果没有,只需创建/设计一堆具有有意义属性的对象...创建实例...并将对象序列化(二进制或肥皂或自定义)到磁盘。然后,您可以随后从磁盘“重新保湿”您的对象。
如果可能的话,我总是喜欢不重新发明轮子。让框架完成工作。
答案 1 :(得分:4)
我用于程序的方法是将配置值保存在使用DataSet中的DataTable存储值的类中。当我想保存它时,我将DataSet.WriteXML()用于用户想要的任何文件名。
我目前的使用非常简单(一个带有键,值列的DataTable),但它可以轻松扩展到多个相关的DataTable,其中包含各种信息的特定列。 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")
代码比试图解释概念容易得多。 : - )