配置文件在很多情况下都使用到, 配置文件分为两种 一种是应用程序的配置文件, 一种是web的配置文件.
两种配置文件最大的区别是web的配置文件更新之后会实时更新, 应用程序的配置文件不会实时更新.
更新应用程序的配置文件之后需刷新
ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。
ConfigurationSettings也存在这个问题, 但是我还不知道怎么刷新节点, 呵呵.
旧方法: 各位看官最好使用下面”新方法”
配置文件:
<configuration> <appSettings> <add key="name" value="我是远程服务器"/> </appSettings> </configuration> 后台程序值得读取: string s=System.Configuration.ConfigurationSettings.AppSettings["name"];
修改配置文件的值:
/// <summary> /// 更新配置文件信息 /// </summary> /// <param name="name">配置文件字段名称</param> /// <param name="Xvalue">值</param> private void UpdateConfig(string name,string Xvalue) { XmlDocument doc = new XmlDocument(); doc.Load(Application.ExecutablePath + ".config"); XmlNode node = doc.SelectSingleNode(@"//add[@key='"+name+"']"); XmlElement ele = (XmlElement)node; ele.SetAttribute("value", Xvalue); doc.Save(Application.ExecutablePath + ".config"); }
向配置文件插入值:
///<summary> ///向.config文件的appKey结写入信息AppValue 保存设置 ///</summary> ///<param name="AppKey">节点名</param> ///<param name="AppValue">值</param> Private void SetValue(String AppKey,String AppValue) { Xmldocument xDoc=new XmlDocument(); xDoc.Load(System.Windows.Forms.Application.ExecutablePath+”.config”); XmlNode xNode; XmlElement xElem1; XmlElement xElem2; xNode=xDoc.SelectSingleNode(“//appSettings”); xElem1=(XmlElement)xNode.SelectSingleNode(“//add[@key=’”+AppKey+”’]”); if(xElem1!=null) xElem1.SetAttribute(“value”,AppValue); else { xElem2=xdoc.CreateElement(“add”); xElem2.SetAttribute(“key”,AppKey); xElem2.setAttribute(“value”,AppValue); xNode.AppendChild(xElem2); } xDoc.Save(System.Windows.Forms.Application.ExecutablePath+”.config”); }
新方法:
System.Configuration.ConfigurationSettings.AppSettings["Key"];
但是现在FrameWork2.0已经明确表示此属性已经过时。并建议改为ConfigurationManager或WebConfigurationManager。并且AppSettings属性是只读的,并不支持修改属性值.
但是要想调用ConfigurationManager必须要先在工程里添加system.configuration.dll程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,.net TablePage下即可找到)添加引用后可以用 String str = ConfigurationManager.AppSettings["Key"]来获取对应的值了。
using System; using System.Collections.Generic; using System.Text; using System.Configuration; namespace 命名空间 { /// <summary> /// 对exe.Config文件中的appSettings段进行读写配置操作 /// 注意:调试时,写操作将写在vhost.exe.config文件中 /// </summary> public class ConfigAppSettings { /// <summary> /// 写入值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetValue(string key, string value) { //增加的内容写在appSettings段下 <add key="RegCode" value="0"/> System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");//web程序这样写 if (config.AppSettings.Settings[key] == null) { config.AppSettings.Settings.Add(key, value); } else { config.AppSettings.Settings[key].Value = value; } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件 } /// <summary> /// 读取指定key的值 /// </summary> /// <param name="key"></param> /// <returns></returns> public static string GetValue(string key) { System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");//web程序这样写 if (config.AppSettings.Settings[key] == null) return ""; else return config.AppSettings.Settings[key].Value; } } }
注意:ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。记住应用程序要刷新节点