【问题标题】:(.Net) suggestions on making a config file for a program?(.Net)关于为程序制作配置文件的建议?
【发布时间】:2010-12-07 16:59:00
【问题描述】:

我不一定指的是 app.configs,而是一个自定义配置文件,当用户点击“保存”按钮时,它会存储我的程序状态。

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

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

我认为这可以存储在 XML 文件中,但我想知道人们会对如何将其写出、如何从中读取(也许使用 LINQ?)和其他一般方法提出什么样的建议,包括版本控制等。我相信这之前已经出现过,我想听听最佳实践。谢谢!

【问题讨论】:

    标签: .net xml configuration serialization


    【解决方案1】:

    我用于我的程序的方法是将我的配置值保存在一个类中,该类使用 DataSet 中的 DataTable 来存储值。当我想保存它时,我使用 DataSet.WriteXML() 到用户想要的任何文件名。

    我目前的使用非常简单(一个带有键、值列的数据表),但它很容易扩展到多个相关的数据表,其中包含用于各种信息的特定列。 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")
    

    代码比试图解释一个概念要容易得多。 :-)

    【讨论】:

      【解决方案2】:

      它必须是人类可读的吗?还是用户不在乎...只是保存我的设置...然后让我稍后重新加载它们?

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 2023-02-14
        • 2010-09-15
        • 2015-07-28
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多