|
在.net程序开发中,我们经常会在config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration.ConfigurationManager,下面分别是例子: //读取config里名称为“conn”数据库连接信息 connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString; //读取config里名称为"Font_Size"的应用程序配置信息 System.Configuration.ConfigurationManager.AppSettings["Font-Size"] = 9; 不过利用这个类却不能对config文件进行写操作。对于config文件的写操作,很多人通过xml的方式来进行,按照xml的方式进行写操作在WinForm下虽然繁琐点,但是毕竟能完成。以下是按照xml文件进行写的例子。
#region 保存配置 XmlDocument document = LoadXml(); XmlNode root = document.DocumentElement; XmlNodeList nodeList = root.FirstChild.ChildNodes; for (int i = 0; i < nodeList.Count; i++) { string key = nodeList[i].Attributes["key"].Value; if (key == "FilterOption") { nodeList[i].Attributes["value"].Value = ((int)container.FilterOption).ToString(); } } document.Save(configPath); #endregion
但是在WebForm下,往往会因为权限不足而报错。如下图:
 本文提供了另外一种方式,利用.net2.0类库里面的Configuration来进行写操作。详细介绍请看下面的详细介绍。
Configuration 是允许进行编程访问以编辑配置文件的类。对于WebForm的config文件,可以用如下代码得到Configuration类的实例:
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath); 对于WinForm的config文件,可以用如下代码得到Configuration类的实例:
Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath); 需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。
using System; using System.Configuration; using System.Web; using System.Windows.Forms;
namespace NetSkycn.Common { /// <summary> /// 说明:Config文件类型枚举, /// 分别为asp.net网站的config文件和WinForm的config文件 /// </summary> public enum ConfigType { /// <summary> /// asp.net网站的config文件 /// </summary> WebConfig = 1, /// <summary> /// Windows应用程序的config文件 /// </summary> ExeConfig = 2 }
/// <summary> /// 说明:本类主要负责对程序配置文件(.config)进行修改的类, /// 可以对网站和应用程序的配置文件进行修改 /// </summary> public class ConfigurationOperator { private Configuration config; private string configPath; private ConfigType configType;
/// <summary> /// 对应的配置文件 /// </summary> public Configuration Configuration { get { return config; } set { config = value; } } /// <summary> /// 构造函数 /// </summary> /// <param name="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param> public ConfigurationOperator(ConfigType configType) { this.configType = configType; if (configType == ConfigType.ExeConfig) { configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory; } else { configPath = HttpContext.Current.Request.ApplicationPath; } Initialize(); } /// <summary> /// 构造函数 /// </summary> /// <param name="path">.config文件的位置</param> /// <param name="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param> public ConfigurationOperator(string configPath, ConfigType configType) { this.configPath = configPath; this.configType = configType; Initialize(); } //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法 private void Initialize() { //如果是WinForm应用程序的配置文件 if (configType == ConfigType.ExeConfig) { config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath); } else//WebForm的配置文件 { config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath); } }
/// <summary> /// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值 /// </summary> /// <param name="key">节点名称</param> /// <param name="value">节点值</param> public void AddAppSetting(string key, string value) { AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings"); if (appSetting.Settings[key] == null)//如果不存在此节点,则添加 { appSetting.Settings.Add(key, value); } else//如果存在此节点,则修改 { ModifyAppSetting(key, value); } } /// <summary> /// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值 /// </summary> /// <param name="key">节点名称</param> /// <param name="value">节点值</param> public void AddConnectionString(string key, string connectionString) { ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings"); if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加 { ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString); connectionSetting.ConnectionStrings.Add(connectionStringSettings); } else//如果存在此节点,则修改 { ModifyConnectionString(key, connectionString); } } /// <summary> /// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值 /// </summary> /// <param name="key">节点名称</param> /// <param name="value">节点值</param> public void ModifyAppSetting(string key, string newValue) { AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings"); if (appSetting.Settings[key] != null)//如果存在此节点,则修改 { appSetting.Settings[key].Value = newValue; } else//如果不存在此节点,则添加 { AddAppSetting(key, newValue); } } /// <summary> /// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值 /// </summary> /// <param name="key">节点名称</param> /// <param name="value">节点值</param> public void ModifyConnectionString(string key, string connectionString) { ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings"); if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改 { connectionSetting.ConnectionStrings[key].ConnectionString = connectionString; } else//如果不存在此节点,则添加 { AddConnectionString(key, connectionString); } } /// <summary> /// 保存所作的修改 /// </summary> public void Save() { config.Save(); } } } 用法实例:
共2页: 上一页 1 [2] 下一页
|