有时候 需要 将程序加载自定义的配置文件,除了自己写解析xml文件。内置的ConfigutionManager对象 是个不错的选项。
按照 app.config 的方式,做一个副本。然后从你的配置文件中,加载指定的配置 键值对!
//方法1-可以读取任意位置的xml文件
ExeConfigurationFileMap filemap = new ExeConfigurationFileMap(); filemap.ExeConfigFilename = QuartzConfigPath; //filePath; var config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None); // 方法2 -只能读取当前应用程序域中 根目录下的文件:注意exe的含义 //var config = ConfigurationManager.OpenExeConfiguration(QuartzConfigPath);
[csharp] view plain copy public class ConfigureAppConfig { //静态构造,不能实例化 static ConfigureAppConfig() { } /**//// <summary> /// 获取AppSettings配置节中的Key值 /// </summary> /// <param name="keyName">Key's name</param> /// <returns>Key's value</returns> public static string GetAppSettingsKeyValue(string keyName) { return ConfigurationManager.AppSettings.Get(keyName); } /**//// <summary> /// 获取ConnectionStrings配置节中的值 /// </summary> /// <returns></returns> public static string GetConnectionStringsElementValue() { ConnectionStringSettings settings =System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"]; return settings.ConnectionString; } /**//// <summary> /// 保存节点中ConnectionStrings的子节点配置项的值 /// </summary> /// <param name="elementValue"></param> public static void ConnectionStringsSave(string ConnectionStringsName, string elementValue) { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = elementValue; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings"); } /**//// <summary> /// 判断appSettings中是否有此项 /// </summary> private static bool AppSettingsKeyExists(string strKey, Configuration config) { foreach (string str in config.AppSettings.Settings.AllKeys) { if (str == strKey) { return true; } } return false; } /**//// <summary> /// 保存appSettings中某key的value值 /// </summary> /// <param name="strKey">key's name</param> /// <param name="newValue">value</param> public static void AppSettingsSave(string strKey, string newValue) { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); if (AppSettingsKeyExists(strKey, config)) { config.AppSettings.Settings[strKey].Value = newValue; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); } } } // 如果你的程序是对其它程序的配置文件进行操作,代码如下: [csharp] view plain copy ExeConfigurationFileMap filemap = new ExeConfigurationFileMap(); filemap.ExeConfigFilename = filePath;//配置文件路径 config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None); if (AppSettingsKeyExists("Refresh", config)) { config.AppSettings.Settings["Refresh"].Value = M_TimeRead.ToString(); } if (AppSettingsKeyExists("MachineNo", config)) { config.AppSettings.Settings["MachineNo"].Value = M_MachineNo; } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = M_ConnectionString; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings"); 数据库字符串加密 ExeConfigurationFileMap filemap = new ExeConfigurationFileMap(); filemap.ExeConfigFilename = Application.ExecutablePath + ".Config"; //filePath; config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None); //指定我所要的节点 ConfigurationSection section = config.ConnectionStrings; if ((section.SectionInformation.IsProtected == false) && (section.ElementInformation.IsLocked == false)) { //制定节点加密 section.SectionInformation.ProtectSection(protect); //即使没有修改也保存设置 section.SectionInformation.ForceSave = true; //配置文件内容保存到xml config.Save(ConfigurationSaveMode.Full); }
// 如果你的程序是对其它程序的配置文件进行操作,代码如下: