程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .net2.0中對config文件的操作方法總結

.net2.0中對config文件的操作方法總結

編輯:關於.NET

在.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類庫裡面的Configuration來進行寫 操作。詳細介紹請看下面的詳細介紹。

Configuration 是允許進行編程訪問以編輯配置文件的類。對於WebForm的 config文件,可以用如下代碼得到Configuration類的實例:

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

對於WinForm的config文件,可以用如下代碼得到Configuration類的實例:

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

需要注意的是,對文件進行寫操作之後,需要調用Save()方法保存結果。整 個程序的源代碼如下,並附有詳細代碼注釋。

using System;
using System.Configuration;
using System.Web;
using System.Windows.Forms;
namespace NetSkycn.Common
{
   /// <summary>
   /// 說明:Config文件類型枚舉,
  /// 分別為asp.net網站的config文件和WinForm的config文件
   /// 作者:周公
   /// 日期:2008-08-23
   /// 首發地址: http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
   /// </summary>
   public enum ConfigType
   {
     /// <summary>
     /// asp.net網站的config文件
     /// </summary>
     WebConfig = 1,
     /// <summary>
     /// Windows應用程序的config文件
     /// </summary>
     ExeConfig = 2
   }
   /// <summary>
   /// 說明:本類主要負責對程序配置文件(.config)進行修改的類,
   /// 可以對網站和應用程序的配置文件進行修改
   /// 作者:周公
   /// 日期:2008-08-23
   /// 首發地址: http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
   /// </summary>
   public class ConfigurationOperator
   {
     private Configuration config;
     private string configPath;
     private ConfigType configType;
     /// <summary>
     /// 對應的配置文件
     /// </summary>
     public Configuration Configuration
     {
       get { return config; }
       set { config = value; }
     }
     /// <summary>
     /// 構造函數
     /// </summary>
     /// <param name="configType">.config文件的類型,只能 是網站配置文件或者應用程序配置文件</param>
     public ConfigurationOperator(ConfigType configType)
     {
       this.configType = configType;
       if (configType == ConfigType.ExeConfig)
       {
         configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory;
       }
       else
       {
         configPath = HttpContext.Current.Request.ApplicationPath;
       }
       Initialize();
     }
     /// <summary>
     /// 構造函數
     /// </summary>
     /// <param name="path">.config文件的位置 </param>
     /// <param name="type">.config文件的類型,只能是網站 配置文件或者應用程序配置文件</param>
     public ConfigurationOperator(string configPath, ConfigType configType)
     {
       this.configPath = configPath;
       this.configType = configType;
       Initialize();
     }
     //實例化configuration,根據配置文件類型的不同,分別采取了不 同的實例化方法
     private void Initialize()
     {
       //如果是WinForm應用程序的配置文件
       if (configType == ConfigType.ExeConfig)
       {
         config = System.Configuration.ConfigurationManager.OpenExeConfiguration (configPath);
       }
       else//WebForm的配置文件
       {
         config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration (configPath);
       }
     }
     /// <summary>
     /// 添加應用程序配置節點,如果已經存在此節點,則會修改該節 點的值
     /// </summary>
     /// <param name="key">節點名稱</param>
     /// <param name="value">節點值</param>
     public void AddAppSetting(string key, string value)
     {
       AppSettingsSection appSetting = (AppSettingsSection) config.GetSection("appSettings");
       if (appSetting.Settings[key] == null)//如果不存在此節點 ,則添加
       {
         appSetting.Settings.Add(key, value);
       }
       else//如果存在此節點,則修改
       {
         ModifyAppSetting(key, value);
       }
     }
     /// <summary>
     /// 添加數據庫連接字符串節點,如果已經存在此節點,則會修改 該節點的值
     /// </summary>
     /// <param name="key">節點名稱</param>
     /// <param name="value">節點值</param>
     public void AddConnectionString(string key, string connectionString)
     {
       ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
       if (connectionSetting.ConnectionStrings[key] == null)// 如果不存在此節點,則添加
       {
         ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
         connectionSetting.ConnectionStrings.Add (connectionStringSettings);
       }
       else//如果存在此節點,則修改
       {
         ModifyConnectionString(key, connectionString);
       }
     }
     /// <summary>
     /// 修改應用程序配置節點,如果不存在此節點,則會添加此節點 及對應的值
     /// </summary>
     /// <param name="key">節點名稱</param>
     /// <param name="value">節點值</param>
     public void ModifyAppSetting(string key, string newValue)
     {
       AppSettingsSection appSetting = (AppSettingsSection) config.GetSection("appSettings");
       if (appSetting.Settings[key] != null)//如果存在此節點, 則修改
       {
         appSetting.Settings[key].Value = newValue;
       }
       else//如果不存在此節點,則添加
       {
         AddAppSetting(key, newValue);
       }
     }
     /// <summary>
     /// 修改數據庫連接字符串節點,如果不存在此節點,則會添加此 節點及對應的值
     /// </summary>
     /// <param name="key">節點名稱</param>
     /// <param name="value">節點值</param>
     public void ModifyConnectionString(string key, string connectionString)
     {
       ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
       if (connectionSetting.ConnectionStrings[key] != null)// 如果存在此節點,則修改
       {
         connectionSetting.ConnectionStrings [key].ConnectionString = connectionString;
       }
       else//如果不存在此節點,則添加
       {
         AddConnectionString(key, connectionString);
       }
     }
     /// <summary>
     /// 保存所作的修改
     /// </summary>
     public void Save()
     {
       config.Save();
     }
   }
}

用法實例:

(一)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 類庫的引用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved