.net2.0中对config文件的操作方法总结

在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,

在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个

类就是System.Configuration.ConfigurationManager,下面分别是例子:

  1. // 读取config里名称为“conn”数据库连接信息
  2.      connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[ "conn" ].ConnectionString;
  3. //读取config里名称为"Font_Size"的应用程序配置信息
  4. System.Configuration.ConfigurationManager.AppSettings[ "Font-Size" ] = 9;

不过利用这个类却不能对config文件进行写操作。对于config文件的写操作,很多人通过xml的方式来进行,按照xml的方式进行写操作在WinForm下虽然繁琐点,但是毕竟能完成。以下是按照xml文件进行写的例子。

  1. #region 保存配置
  2.             XmlDocument document = LoadXml();
  3.             XmlNode root = document.DocumentElement;
  4.             XmlNodeList nodeList = root.FirstChild.ChildNodes;
  5.              for  ( int  i = 0; i < nodeList.Count; i++)
  6.             {
  7.                  string  key = nodeList[i].Attributes[ "key" ].Value;
  8.                  if  (key ==  "FilterOption" )
  9.                 {
  10.                     nodeList[i].Attributes[ "value" ].Value = (( int )container.FilterOption).ToString();
  11.                 }
  12.             }
  13.             document.Save(configPath);
  14.             #endregion


但是在WebForm下,往往会因为权限不足而报错。如下图:
.net2.0中对config文件的操作方法总结_第1张图片

本文提供了另外一种方式,利用.net2.0类库里面的Configuration来进行写操作。详细介绍请看下面的详细介绍。

 

Configuration 是允许进行编程访问以编辑配置文件的类。对于WebForm的config文件,可以用如下代码得到Configuration类的实例:

  1. Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);

对于WinForm的config文件,可以用如下代码得到Configuration类的实例:

 

  1. Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);

需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。

  1. using  System;
  2. using  System.Configuration;
  3. using  System.Web;
  4. using  System.Windows.Forms;
  5. namespace  NetSkycn.Common
  6. {
  7.      /// <summary>
  8.      /// 说明:Config文件类型枚举,
  9.     /// 分别为asp.net网站的config文件和WinForm的config文件
  10.      /// 作者:周公
  11.      /// 日期:2008-08-23
  12.      /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
  13.      /// </summary>
  14.      public   enum  ConfigType
  15.     {
  16.          /// <summary>
  17.          /// asp.net网站的config文件
  18.          /// </summary>
  19.         WebConfig = 1,
  20.          /// <summary>
  21.          /// Windows应用程序的config文件
  22.          /// </summary>
  23.         ExeConfig = 2
  24.     }
  25.      /// <summary>
  26.      /// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
  27.      /// 可以对网站和应用程序的配置文件进行修改
  28.      /// 作者:周公
  29.      /// 日期:2008-08-23
  30.      /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
  31.      /// </summary>
  32.      public   class  ConfigurationOperator
  33.     {
  34.          private  Configuration config;
  35.          private   string  configPath;
  36.          private  ConfigType configType;
  37.          /// <summary>
  38.          /// 对应的配置文件
  39.          /// </summary>
  40.          public  Configuration Configuration
  41.         {
  42.              get  {  return  config; }
  43.              set  { config = value; }
  44.         }
  45.          /// <summary>
  46.          /// 构造函数
  47.          /// </summary>
  48.          /// <param name="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
  49.          public  ConfigurationOperator(ConfigType configType)
  50.         {
  51.              this .configType = configType;
  52.              if  (configType == ConfigType.ExeConfig)
  53.             {
  54.                 configPath = Application.ExecutablePath;  //AppDomain.CurrentDomain.BaseDirectory;
  55.             }
  56.              else
  57.             {
  58.                 configPath = HttpContext.Current.Request.ApplicationPath;
  59.             }
  60.             Initialize();
  61.         }
  62.          /// <summary>
  63.          /// 构造函数
  64.          /// </summary>
  65.          /// <param name="path">.config文件的位置</param>
  66.          /// <param name="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
  67.          public  ConfigurationOperator( string  configPath, ConfigType configType)
  68.         {
  69.              this .configPath = configPath;
  70.              this .configType = configType;
  71.             Initialize();
  72.         }
  73.          //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法
  74.          private   void  Initialize()
  75.         {
  76.              //如果是WinForm应用程序的配置文件
  77.              if  (configType == ConfigType.ExeConfig)
  78.             {
  79.                 config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
  80.             }
  81.              else //WebForm的配置文件
  82.             {
  83.                 config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
  84.             }
  85.         }
  86.          /// <summary>
  87.          /// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
  88.          /// </summary>
  89.          /// <param name="key">节点名称</param>
  90.          /// <param name="value">节点值</param>
  91.          public   void  AddAppSetting( string  key,  string  value)
  92.         {
  93.             AppSettingsSection appSetting = (AppSettingsSection)config.GetSection( "appSettings" );
  94.              if  (appSetting.Settings[key] ==  null ) //如果不存在此节点,则添加
  95.             {
  96.                 appSetting.Settings.Add(key, value);
  97.             }
  98.              else //如果存在此节点,则修改
  99.             {
  100.                 ModifyAppSetting(key, value);
  101.             }
  102.         }
  103.          /// <summary>
  104.          /// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
  105.          /// </summary>
  106.          /// <param name="key">节点名称</param>
  107.          /// <param name="value">节点值</param>
  108.          public   void  AddConnectionString( string  key,  string  connectionString)
  109.         {
  110.             ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection( "connectionStrings" );
  111.              if  (connectionSetting.ConnectionStrings[key] ==  null ) //如果不存在此节点,则添加
  112.             {
  113.                 ConnectionStringSettings connectionStringSettings =  new  ConnectionStringSettings(key, connectionString);
  114.                 connectionSetting.ConnectionStrings.Add(connectionStringSettings);
  115.             }
  116.              else //如果存在此节点,则修改
  117.             {
  118.                 ModifyConnectionString(key, connectionString);
  119.             }
  120.         }
  121.          /// <summary>
  122.          /// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
  123.          /// </summary>
  124.          /// <param name="key">节点名称</param>
  125.          /// <param name="value">节点值</param>
  126.          public   void  ModifyAppSetting( string  key,  string  newValue)
  127.         {
  128.             AppSettingsSection appSetting = (AppSettingsSection)config.GetSection( "appSettings" );
  129.              if  (appSetting.Settings[key] !=  null ) //如果存在此节点,则修改
  130.             {
  131.                 appSetting.Settings[key].Value = newValue;
  132.             }
  133.              else //如果不存在此节点,则添加
  134.             {
  135.                 AddAppSetting(key, newValue);
  136.             }
  137.         }
  138.          /// <summary>
  139.          /// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
  140.          /// </summary>
  141.          /// <param name="key">节点名称</param>
  142.          /// <param name="value">节点值</param>
  143.          public   void  ModifyConnectionString( string  key,  string  connectionString)
  144.         {
  145.             ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection( "connectionStrings" );
  146.              if  (connectionSetting.ConnectionStrings[key] !=  null ) //如果存在此节点,则修改
  147.             {
  148.                 connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
  149.             }
  150.              else //如果不存在此节点,则添加
  151.             {
  152.                 AddConnectionString(key, connectionString);
  153.             }
  154.         }
  155.          /// <summary>
  156.          /// 保存所作的修改
  157.          /// </summary>
  158.          public   void  Save()
  159.         {
  160.             config.Save();
  161.         }
  162.     }
  163. }

 

用法实例:
(一)WebForm中的用法

 

  1. ConfigurationOperator co =  new  ConfigurationOperator(ConfigType.WebConfig);
  2.          string  key = txtConnectionStringKey.Text;
  3.          string  value = txtConnectionStringValue.Text;
  4.         co.AddConnectionString(key, value);
  5.         co.Save();

(二)WinForm中的用法

  1. ConfigurationOperator co =  new  ConfigurationOperator(ConfigType.ExeConfig);
  2.             co.AddAppSetting( "Font-Size""9" );
  3.             co.AddAppSetting( "WebSite""http://blog.csdn.net/zhoufoxcn" );
  4.             co.AddConnectionString( "Connection""test" );
  5.             co.Save(); //保存写入结果

我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):

  1. <? xml   version = "1.0"   encoding = "utf-8"   ?>
  2. < configuration >
  3.      < appSettings >
  4.          < add   key = "Font-Size"   value = "9"   />
  5.          < add   key = "WebSite"   value = "http://blog.csdn.net/zhoufoxcn"   />
  6.      </ appSettings >
  7.      < connectionStrings >
  8.          < add   name = "Connection"   connectionString = "test"   />
  9.      </ connectionStrings >
  10. </ configuration >

经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。

 

你可能感兴趣的:(.net,数据库,null,webform,asp.net,WinForm)