CSDN博客

img lwq1003

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

发表于2008/9/28 8:16:00  74人阅读

 在.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类库里面的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类库的引用。

阅读全文
0 0

相关文章推荐

img
取 消
img