using System.Xml;using System.IO;using System; namespace Framework.Common{ /// /// 用於獲取或設置Web.config/*.exe.config中節點數據的輔助類 /// public sealed class App... ...
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 } }