虫虫技术在线--技术决定出路

当前位置: 首页 > 编程 > .net >

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

时间:2010-02-19 12:14来源:未知 作者:admin 点击:
在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作

  在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration.ConfigurationManager,下面分别是例子:

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

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

  #region 保存配置

      XmlDocument document = LoadXml();
      XmlNode root = document.DocumentElement;
      XmlNodeList nodeList = root.FirstChild.ChildNodes;
      for (int i = 0; i < nodeList.Count; i++)
      {
        string key = nodeList[i].Attributes["key"].Value;
        if (key == "FilterOption")
        {
          nodeList[i].Attributes["value"].Value = ((int)container.FilterOption).ToString();
        }
      }
      document.Save(configPath);
      #endregion

  但是在WebForm下,往往会因为权限不足而报错。如下图:

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

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

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

Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);对于WinForm的config文件,可以用如下代码得到Configuration类的实例:

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中的用法

ConfigurationOperator co = new ConfigurationOperator(ConfigType.WebConfig);
    string key = txtConnectionStringKey.Text;
    string value = txtConnectionStringValue.Text;
    co.AddConnectionString(key, value);
    co.Save();

  (二)WinForm中的用法

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

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Font-Size" value="9" />
    <add key="WebSite" value="http://blog.csdn.net/zhoufoxcn" />
  </appSettings>
  <connectionStrings>
    <add name="Connection" connectionString="test" />
  </connectionStrings>
</configuration>
经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。

 

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容