.NET中對config檔案的操作方法總結

來源:互聯網
上載者:User

在.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類庫的引用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.