C#开发中使用配置文件
C#开发中使用配置文件对象简化配置的本地保存
0x00 起因
程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序在下次运行时可以保留上次的一些设置。同样有时我们希望修改某些设置而不需要重新编译程序,这样也可以通过修改本地配置文件达到目的。之前在网上看到过一篇文章,讲的是小程序或测试类的程序应该追求效率,相关配置完全可以硬编码到代码里,无需写到配置文件里。关于什么属于小程序并没有一个明显的界定,至于要不要写到配置文件里这是仁者见仁的问题。我个人还是比较倾向与写到配置文件的。当然,对于脚本语言来说这个问题就小很多了。
那么如何能快捷方便的保存配置信息呢,这次写的这个类就是尝试去解决这个问题的。主要包括创建和载入配置文件、以键值对的形式保存和读取配置信息。在配置信息的保存方式上可以使用XML或者JSON,我选了XML,一方面是阅读起来比较容易,手动修改也方便,另一方面是.NET本身提供XmlDocument类帮助操作XML文件,这样我们只要在此基础上进行一下包装就可以了。
0x01 基本功能的实现
1.配置文件的加载和创建
public static ConfigFile LoadFile(string filename)
用用户加载配置文件,如果文件保护存在则返回null
public static ConfigFile LoadOrCreateFile(string filename)
用于加载配置文件,如果文件不存在则创建一个新对象并调用CreateFile()创建配置文件。
protected virtual void CreateFile()
这个是virtual方法,可以根据需求在子类中重写。
2.配置信息的保存
以下方法都是为了简化操作,对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。
3.配置信息的读取
以下方法都是对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类型,转化失败抛出异常。
4.使用带参数的属性简化键值操作
为了能尽量使操作用着方便,对于string类型的值提供了建议的操作方法,可以通过:
config[“key”]的方式取值,通过config[“key”]=”test”的方式保存。
0x02 功能的扩展
ConfigFile类型只是提供了一个很简单的框架,如果对配置保存有其它需求可以继承该类型并重写CreateFile方法,以在此基础上修改或创建完全不同的配置文件结构。
对GetKeyValue和AddOrSetKeyValue方法包装可以添加新方法以快速读取和保存配置信息。
0x03 测试例子
这个类的使用非常简单,用静态方法创建或载入一个配置文件即可方便的进行读取和保存的操作。
测试代码:
测试结果:
保存的配置文件:
0x04 相关下载
https://github.com/durow/TestArea/tree/master/ConfigFileTest
C#开发中使用配置文件的更多相关文章
- C#开发中使用配置文件对象简化配置的本地保存
C#开发中使用配置文件对象简化配置的本地保存 0x00 起因 程序的核心是数据和逻辑,开发过程中免不了要对操作的数据进行设置,而有些数据在程序执行过程中被用户或程序做出的修改是应该保存下来的,这样程序 ...
- ASP.NET网站开发中的配置文件
来源:微信公众号CodeL 1.配置文件层次分类 Machine.config: 对.netframework整体的配置 web.config(framework目录下): 对所有项目所公有的应用 ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- iOS项目开发中的知识点与问题收集整理①(Part 一)
前言部分 注:本文并非绝对原创 大部分内容摘自 http://blog.csdn.net/hengshujiyi/article/details/20943045 文中有些方法可能已过时并不适用于现在 ...
- IOS 开发中要注意的事项
1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...
- 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法
Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...
- GIT在iOS开发中的使用
前言 在iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn.当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...
随机推荐
- 强联通块tarjan算法
http://poj.org/problem?id=1236第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题1 ...
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1
以下是一些设计略显繁琐,有必要清除思维. 下一个主要的成就,当我们点击Gobutton后,得到一个随机数骰子,是走了几步,它是基于以下步骤行走路径的数目,然后移动位置的基于角色的路径. 流程如图普遍认 ...
- Linux 软连接与硬连接
Linux 软连接与硬连接 对于一个文件来说,有唯一的索引接点与之相应,而对于一个索引接点号,却能够有多个文件名称与之相应.因此,在磁盘上的同一个文件能够通过不同的路径去訪问该文件.注意在Linux下 ...
- (七)unity4.6Ugui中国教程文档-------摘要-UGUI Auto Layout
大家好,我是太阳广东. 转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityman ...
- w7关闭休眠增加C盘容量
http://jingyan.baidu.com/article/f3ad7d0fc0992e09c2345b51.html powercfg -h off,即可关闭休眠功能 powercfg -h ...
- HTTP相关概念
最近观看HTTP权威指南.这本书是一个小更,欲了解更多详细信息,我们不能照顾.但一些基本概念仍然应该清楚.在这里,我整理: HTTP--因特网的多媒体信使 HTTP 使用的是可靠的传输数据协议,因此即 ...
- 源码安装apache及配置转发
一. 安装Apache a) 解压:tar -xvf httpd-*; b) ./configure --prefix=/usr/oracle/apache CC="gcc ...
- Net 高效开发
Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存 ...
- zoj 3288 Domination (可能dp)
///dp[i][j][k]代表i行j列件,并把一k的概率 ///dp[i][j][k]一种常见的方法有四种传输 ///1:dp[i-1][j][k-1] 可能 (n-(i-1))*j/(n*m-(k ...
- 重新想象 Windows 8 Store Apps (29) - 图片处理
原文:重新想象 Windows 8 Store Apps (29) - 图片处理 [源码下载] 重新想象 Windows 8 Store Apps (29) - 图片处理 作者:webabcd介绍重新 ...