Ini文件读写解决方案

第一章 INI文件说明

    如果不熟悉INI文件的朋友,可以先了解下INI文件格式,参照百度百科:http://baike.baidu.com/link?url=Wq0o_qdZdByktz_JBNFSBQU1mgE4iViIUE8GmEzG7Td-FVwycsVd-xSSNKgqgvedMkOZEgAFXA6d0YOOhfCVc_

第二章 设计初衷

  读取配置文件,大不了就是操作文件,是一件非常简单的事情。但要想让写出来的代码易于维护、重用性高、便于管理,那得动动脑筋,费一番功夫。

  该接口主要使用面向对象的思想,将配置信息的保存和读取封装到对象中。你可以把一组配置封装成类,该类继承配置基类,就自身具备了读取和保存信息的功能。这样做有以下三方面好处:一、配置信息读取方便,只需调用IniInstanceFactory类工厂方法GetInstance即可读取配置信息;二、配置信息保存方便,想修改配置信息,只需操作对象,然后调用Save方法即可实现保存;三、易于制作配置说明文档:对于一个大的项目,配置信息可能会很多,这样管理特别是制作和维护配置实用说明文档是一个非常头痛的事情,由于配置信息说明都实用标准的特性IniSectionAttrbute、IniFieldDescriptionAttribute描述,很容易制作分析工具,自动根据配置信息类代码文件生成使用帮助文档。

    该接口主要包括技术或C#理论:泛型、接口、Windows API调用、继承、多态

第三章 接口实用说明

     该接口使用面向对象的编程习惯,将配置信息抽象成一个类,或一个对象,以后简称配置信息类。配置信息类只需继承IniAbs接口,配置信息类就具有了读取和保存的功能。

使用示例:

如果要配置数据库连接字符串信息,我们需要在配置文件中存储数据库服务器、数据库名称、用户名、密码等信息。我们只需构建类DBConfig:

 1 [IniSection(Description="数据库配置",Section="DB")]
 2  public class DBConfig : IniAbs<DBConfig>
 3  {
 4         [IniFieldDescription(Discription = "数据库名称", Key = "DBName")]
 5         public string DBName { get; set; }
6 7 [IniFieldDescription(Discription = "服务器IP", Key = "DBServer")] 8 public string DBServer { get; set; }
9 10 [IniFieldDescription(Discription = "用户名", Key = "DBUsername")] 11 public string DBUsername { get; set; }
12 13 [IniFieldDescription(Discription = "密码", Key = "DBPassword")] 14 public string DBPassword { get; set; } 15 }

之后,我们可以使用工厂方法读取配置信息:

DBConfig dbConfig = IniInstanceFactory.GetSingleInstance<DBConfig>();

如果要保存配置信息,只需调用dbConfig.Save()方法,自动将配置信息保存到文件中。

第四章 配置文件接口项目源码解析

配置文件读取接口操作全部封装在IFConfiguration.dll中。

IFConfiguration项目主要分成三大块

4.1、配置信息存储节点描述类

                                

IniSectionAttrbute标记配置信息类,该特性标记配置信息类在ini文件中存储的Section(节)名称。

IniFieldDescriptionAttribute标记配置信息类字段,该特性标记字段在ini文件中存储对应的name(参数名)

4.2、ini文件操作工具类

 

该类主要分装Windows API方法调用:

/// 声明读写INI文件的API函数
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

其中WritePrivateProfileString、GetPrivateProfileString是kernel32动态链接库中的方法COM方法。

4.3、配置文件信息类基类和配置文件信息类对象创建工厂

 

   IniAbs<T>是配置文件信息类的基类,其Save方法实现了将配置文件信息类对象保存到ini文件中。

public void Save()
{
    if (!this.CreateByIniAbs)
        return;
     RWini rwini = new RWini(Application.StartupPath + @"IFSoft.ini");
     //循环保存 段
     foreach (var iniField in this.IniFieldProperty.Keys)
     {
          rwini.WriteInivalue(this.Section, iniField.Key, this.IniFieldProperty[iniField].GetValue(this, null).ToString());
     }
}

IniInstanceFactory类是配置信息类对象创建工厂。其方法GetInstance<T>()、GetSingleInstance<T>()获取配置信息类T的实例,该实例会读取ini文件初始化实例。

第四章 技术说明

   

源码下载

原文地址:https://www.cnblogs.com/nactioncsla/p/3624358.html