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,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...
随机推荐
- [WPF]DataGrid C#添加右键弹出选择菜单
private void dataGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { ContextMenu cont ...
- poj 3250 Bad Hair Day (单调栈)
Bad Hair Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14883 Accepted: 4940 Des ...
- Windows Phone开发(12):认识一下独具个性的磁贴
原文:Windows Phone开发(12):认识一下独具个性的磁贴 对"磁贴"的理解是一点也不抽象的,为什么呢?只要你愿意启动WP系统,无论你是在模拟器中还是在真机中,是的,桌面 ...
- 【Web优化】Yslow优化法则(四)启用Gzip压缩
Yslow的第4个经验法则指出:启用gzip压缩功能,能够降低HTTP传输的数据和时间,从而降低client请求的响应时间. 本篇是Yslow法则的第四个,主要包含三个方面的内容: 1. 什 ...
- HTML5学习笔记简明版(11):新API
HTMLDocument上的扩展 HTML5在DOM Level 2 HTML上扩展了一些HTMLDocument的接口. 这些接口在全部实现了Document接口的元素对象上进行了实现.HTML5在 ...
- android笔记6——intent的使用
今天挑出一节专门来说一下使用intent和intentfilter进行通信. 场景:一个Activity启动还有一个Activity. 前面已经讲了Fragment的切换,Fragment顾名思义是基 ...
- VB6.0“挑衅”.NET!
来到与两年前接触VB,现在学习VB.NET,这两个看起来真的不得不说,这是相对的似(ps:一分之差,只有三个字母),计等.但他们有又什么不同呢?都说VB.NET高级,比VB究竟高级在哪里了?是不是VB ...
- WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(二)实现IRequestChannel(2016-03-15 12:35)
这是这个系列的第二篇,其他的文章请点击下列目录 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息编码(一)概要设计 WCF扩展之实现ZeroMQ绑定和protocolBuffer消息 ...
- as3文本框的动态拖拽和编辑
如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临 ...
- netperf 而网络性能测量
本文首先介绍网络性能測量的一些基本概念和方法.然后结合 netperf 工具的使用.详细的讨论怎样測试不同情况下的网络性能. 汤凯 (tangk73@hotmail.com), 2004 年 7 月 ...