C#讀取或設(shè)置配置文件Web.config/*.exe.config中節(jié)點(diǎn)數(shù)據(jù)的輔助類
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
using System.Xml;
using System.IO; using System; namespace Framework.Common { /// <summary> /// 用于獲取或設(shè)置Web.config/*.exe.config中節(jié)點(diǎn)數(shù)據(jù)的輔助類 /// </summary> public sealed class AppConfig { private string filePath; /// <summary> /// 從當(dāng)前目錄中按順序檢索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文件或者應(yīng)用程序配置文件, 請指定配置文件"); } } /// <summary> /// 用戶指定具體的配置文件路徑 /// </summary> /// <param name="configFilePath">配置文件路徑(絕對路徑) public AppConfig(string configFilePath) { filePath = configFilePath; } /// <summary> /// 設(shè)置程序的config文件 /// </summary> /// <param name="keyName">鍵名 /// <param name="keyValue">鍵值 public void AppConfigSet(string keyName, string keyValue) { //由于存在多個Add鍵值,使得訪問appSetting的操作不成功,故注釋下面語句,改用新的方式 /* string xpath = "http://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++) { //獲得將當(dāng)前元素的key屬性 XmlAttribute attribute = nodes[i].Attributes["key"]; //根據(jù)元素的第一個屬性來判斷當(dāng)前的元素是不是目標(biāo)元素 if (attribute != null && (attribute.Value == keyName)) { attribute = nodes[i].Attributes["value"]; //對目標(biāo)元素中的第二個屬性賦值 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++) { //獲得將當(dāng)前元素的key屬性 XmlAttribute attribute = nodes[i].Attributes["key"]; //根據(jù)元素的第一個屬性來判斷當(dāng)前的元素是不是目標(biāo)元素 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>對應(yīng)子項名稱的值(即是=號后面的值)</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) //如果含有指定的關(guān)鍵字 { int startIndex = item[i].IndexOf("="); //等號開始的位置 return item[i].Substring(startIndex + 1); //獲取等號后面的值即為Value } } return string.Empty; } #region 一些常用的配置項屬性 /// <summary> /// 從配置文件獲取權(quán)限系統(tǒng)鏈接(配置項HWSecurity的值) /// </summary> public string HWSecurity { get { return AppConfigGet("HWSecurity"); } } /// <summary> /// 系統(tǒng)的標(biāo)識ID(配置項System_ID的值) /// </summary> public string System_ID { get { return AppConfigGet("System_ID"); } } /// <summary> /// 應(yīng)用程序名稱(配置項ApplicationName的值) /// </summary> public string AppName { get { return AppConfigGet("ApplicationName"); } } /// <summary> /// 軟件廠商名稱(配置項Manufacturer的值) /// </summary> public string Manufacturer { get { return AppConfigGet("Manufacturer"); } } /// <summary> /// 設(shè)置程序的config文件的Enterprise Library的數(shù)據(jù)庫鏈接地址 /// </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++) { //獲得將當(dāng)前元素的name屬性 XmlAttribute att = nodes[i].Attributes["name"]; //根據(jù)元素的第一個屬性來判斷當(dāng)前的元素是不是目標(biāo)元素 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的數(shù)據(jù)庫鏈接地址 /// </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++) { //獲得將當(dāng)前元素的key屬性 XmlAttribute att = nodes[i].Attributes["name"]; //根據(jù)元素的第一個屬性來判斷當(dāng)前的元素是不是目標(biāo)元素 if (att != null && (att.Value == keyName)) { att = nodes[i].Attributes["connectionString"]; if (att != null) { strReturn = att.Value; break; } } } } catch { ; } return strReturn; } /// <summary> /// 獲取數(shù)據(jù)庫配置信息 /// </summary> /// <param name="keyName">節(jié)點(diǎn)名稱 /// <returns></returns> public DatabaseInfo GetDatabaseInfo(string keyName) { string connectionString = GetConnectionString(keyName); return new DatabaseInfo(connectionString); } /// <summary> /// 設(shè)置數(shù)據(jù)庫配置信息 /// </summary> /// <param name="keyName"> /// <param name="databaseInfo"> public void SetDatabaseInfo(string keyName, DatabaseInfo databaseInfo) { SetConnectionString(keyName, databaseInfo.ConnectionString); } #endregion } } 該文章在 2021/3/3 16:40:31 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |