讀取配置文件-AppConfig


using System.Xml;
using System.IO;
using System;
 
namespace Framework.Common
{
    /// <summary>
    /// 用於獲取或設置Web.config/*.exe.config中節點數據的輔助類
    /// </summary>
    public sealed class AppConfig
    {
        private string filePath;
 
        /// <summary>
        /// 從當前目錄中按順序檢索Web.Config和*.App.Config文件。
        /// 如果找到一個,則使用它作為配置文件;否則會拋出一個ArgumentNullException異常。
        /// </summary>
        public AppConfig()
        {
            string webconfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web.Config");
            string appConfig = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.Replace(".vshost", "");
 
            if (File.Exists(webconfig))
            {
                filePath = webconfig;
            }
            else if (File.Exists(appConfig))
            {
                filePath = appConfig;
            }
            else
            {
                throw new ArgumentNullException("沒有找到Web.Config文件或者應用程序配置文件, 請指定配置文件");
            }
        }
 
        /// <summary>
        /// 用戶指定具體的配置文件路徑
        /// </summary>
        /// <param name="configFilePath">配置文件路徑(絕對路徑)
        public AppConfig(string configFilePath)
        {
            filePath = configFilePath;
        }
 
        /// <summary>
        /// 設置程序的config文件
        /// </summary>
        /// <param name="keyName">鍵名
        /// <param name="keyValue">鍵值
        public void AppConfigSet(string keyName, string keyValue)
        {
            //由於存在多個Add鍵值,使得訪問appSetting的操作不成功,故注釋下面語句,改用新的方式
            /* 
            string xpath = "//add[@key='" + keyName + "']";
            XmlDocument document = new XmlDocument();
            document.Load(filePath);
 
            XmlNode node = document.SelectSingleNode(xpath);
            node.Attributes["value"].Value = keyValue;
            document.Save(filePath); 
             */
 
            XmlDocument document = new XmlDocument();
            document.Load(filePath);
 
            XmlNodeList nodes = document.GetElementsByTagName("add");
            for (int i = 0; i < nodes.Count; i++)
            {
                //獲得將當前元素的key屬性
                XmlAttribute attribute = nodes[i].Attributes["key"];
                //根據元素的第一個屬性來判斷當前的元素是不是目標元素
                if (attribute != null && (attribute.Value == keyName))
                {
                    attribute = nodes[i].Attributes["value"];
                    //對目標元素中的第二個屬性賦值
                    if (attribute != null)
                    {
                        attribute.Value = keyValue;
                        break;
                    }
                }
            }
            document.Save(filePath);
        }
 
        /// <summary>
        /// 讀取程序的config文件的鍵值。
        /// 如果鍵名不存在,返回空
        /// </summary>
        /// <param name="keyName">鍵名
        /// <returns></returns>
        public string AppConfigGet(string keyName)
        {
            string strReturn = string.Empty;
            try
            {
                XmlDocument document = new XmlDocument();
                document.Load(filePath);
 
                XmlNodeList nodes = document.GetElementsByTagName("add");
                for (int i = 0; i < nodes.Count; i++)
                {
                    //獲得將當前元素的key屬性
                    XmlAttribute attribute = nodes[i].Attributes["key"];
                    //根據元素的第一個屬性來判斷當前的元素是不是目標元素
                    if (attribute != null && (attribute.Value == keyName))
                    {
                        attribute = nodes[i].Attributes["value"];
                        if (attribute != null)
                        {
                            strReturn = attribute.Value;
                            break;
                        }
                    }
                }
            }
            catch
            {
                ;
            }
 
            return strReturn;
        }
 
        /// <summary>
        /// 獲取指定鍵名中的子項的值
        /// </summary>
        /// <param name="keyName">鍵名
        /// <param name="subKeyName">以分號(;)為分隔符的子項名稱
        /// <returns>對應子項名稱的值(即是=號后面的值)</returns>
        public string GetSubValue(string keyName, string subKeyName)
        {
            string connectionString = AppConfigGet(keyName).ToLower();
            string[] item = connectionString.Split(new char[] { ';' });
 
            for (int i = 0; i < item.Length; i++)
            {
                string itemValue = item[i].ToLower();
                if (itemValue.IndexOf(subKeyName.ToLower()) >= 0) //如果含有指定的關鍵字
                {
                    int startIndex = item[i].IndexOf("="); //等號開始的位置
                    return item[i].Substring(startIndex + 1); //獲取等號后面的值即為Value
                }
            }
            return string.Empty;
        }
 
        #region 一些常用的配置項屬性
 
        /// <summary>
        /// 從配置文件獲取權限系統鏈接(配置項HWSecurity的值)
        /// </summary>
        public string HWSecurity
        {
            get
            {
                return AppConfigGet("HWSecurity");
            }
        }
 
        /// <summary>
        /// 系統的標識ID(配置項System_ID的值)
        /// </summary>
        public string System_ID
        {
            get
            {
                return AppConfigGet("System_ID");
            }
        }
 
        /// <summary>
        /// 應用程序名稱(配置項ApplicationName的值)
        /// </summary>
        public string AppName
        {
            get
            {
                return AppConfigGet("ApplicationName");
            }
        }
 
        /// <summary>
        /// 軟件廠商名稱(配置項Manufacturer的值)
        /// </summary>
        public string Manufacturer
        {
            get
            {
                return AppConfigGet("Manufacturer");
            }
        }
 
        /// <summary>
        /// 設置程序的config文件的Enterprise Library的數據庫鏈接地址
        /// </summary>
        /// <param name="keyName">鍵名
        /// <param name="keyValue">鍵值
        public void SetConnectionString(string keyName, string keyValue)
        {
            XmlDocument document = new XmlDocument();
            document.Load(filePath);
 
            XmlNodeList nodes = document.GetElementsByTagName("add");
            for (int i = 0; i < nodes.Count; i++)
            {
                //獲得將當前元素的name屬性
                XmlAttribute att = nodes[i].Attributes["name"];
                //根據元素的第一個屬性來判斷當前的元素是不是目標元素
                if (att != null && (att.Value == keyName))
                {
                    att = nodes[i].Attributes["connectionString"];
                    if (att != null)
                    {
                        att.Value = keyValue;
                        break;
                    }
                }
            }
            document.Save(filePath);
        }
 
        /// <summary>
        /// 讀取程序的config文件Enterprise Library的數據庫鏈接地址
        /// </summary>
        /// <param name="keyName">鍵名
        /// <returns></returns>
        public string GetConnectionString(string keyName)
        {
            string strReturn = string.Empty;
            try
            {
                XmlDocument document = new XmlDocument();
                document.Load(filePath);
 
                XmlNodeList nodes = document.GetElementsByTagName("add");
                for (int i = 0; i < nodes.Count; i++)
                {
                    //獲得將當前元素的key屬性
                    XmlAttribute att = nodes[i].Attributes["name"];
                    //根據元素的第一個屬性來判斷當前的元素是不是目標元素
                    if (att != null && (att.Value == keyName))
                    {
                        att = nodes[i].Attributes["connectionString"];
                        if (att != null)
                        {
                            strReturn = att.Value;
                            break;
                        }
                    }
                }
            }
            catch
            { ; }
 
            return strReturn;
        }
 
        /// <summary>
        /// 獲取數據庫配置信息
        /// </summary>
        /// <param name="keyName">節點名稱
        /// <returns></returns>
        public DatabaseInfo GetDatabaseInfo(string keyName)
        {
            string connectionString = GetConnectionString(keyName);
            return new DatabaseInfo(connectionString);
        }
 
        /// <summary>
        /// 設置數據庫配置信息
        /// </summary>
        /// <param name="keyName">
        /// <param name="databaseInfo">
        public void SetDatabaseInfo(string keyName, DatabaseInfo databaseInfo)
        {
            SetConnectionString(keyName, databaseInfo.ConnectionString);
        }
 
        #endregion
    }
 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM