程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序在下次运行时可以保留上次的一些设置。同样有时我们希望修改某些设置而不需要重新编译程序,这样也可以通过修改本地配置文件达到目的。之前在网上看到过一篇文章,讲的是小程序或测试类的程序应该追求效率,相关配置完全可以硬编码到代码里,无需写到配置文件里。关于什么属于小程序并没有一个明显的界定,至于要不要写到配置文件里这是仁者见仁的问题。我个人还是比较倾向与写到配置文件的。当然,对于脚本语言来说这个问题就小很多了。
那么如何能快捷方便的保存配置信息呢,这次写的这个类就是尝试去解决这个问题的。主要包括创建和载入配置文件、以键值对的形式保存和读取配置信息。在配置信息的保存方式上可以使用xml或者JSON,我选了XML,一方面是阅读起来比较容易,手动修改也方便,另一方面是.NET本身提供XmlDocument类帮助操作XML文件,这样我们只要在此基础上进行一下包装就可以了。
public static ConfigFile LoadFile(string filename)
用用户加载配置文件,如果文件保护存在则返回null
public static ConfigFile LoadOrCreateFile(string filename)
用于加载配置文件,如果文件不存在则创建一个新对象并调用CreateFile()创建配置文件。
PRotected virtual void CreateFile()
这个是virtual方法,可以根据需求在子类中重写。
以下方法都是为了简化操作,对AddOrSetKeyValue的包装
public void AddOrSetConfigValue(string key, string value)
可以将键值对保存在Root/Config节点下,key不存在则创建新key,key已存在则更新值。
Public void AddOrSetConfigValue<T>(string key, T value)
可以将任意类型存入Root/Config节点下,value调用ToString()方法转为string。
以下方法都是对GetKeyValue的包装
配置以键值对的方式保存,这是个最简单的情况。值的读取都是在Root/Config节点下。
public string GetConfigValue(string key)
根据key从固定的XPath中获取值
public bool TryParseConfigValue(string key, out result)
有多个重载,可以根据key取出值并调用相应的TryParse方法进行类型转换,返回false表示转换失败,结果通过result传出。转换失败时result为类型默认值。
public XXX GetConfigKeyValueIXXX(string key)
根据key获取值并转化为XXX类型,转化失败抛出异常。
为了能尽量使操作用着方便,对于string类型的值提供了建议的操作方法,可以通过:
config[“key”]的方式取值,通过config[“key”]=”test”的方式保存。
ConfigFile类型只是提供了一个很简单的框架,如果对配置保存有其它需求可以继承该类型并重写CreateFile方法,以在此基础上修改或创建完全不同的配置文件结构。
对GetKeyValue和AddOrSetKeyValue方法包装可以添加新方法以快速读取和保存配置信息。
这个类的使用非常简单,用静态方法创建或载入一个配置文件即可方便的进行读取和保存的操作。
测试代码:
测试结果:
保存的配置文件:
https://github.com/durow/TestArea/tree/master/ConfigFileTest
新闻热点
疑难解答