在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是System.Configuration
在.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
- {
-
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
- {
-
///
-
/// 说明:Config文件类型枚举,
-
/// 分别为asp.net网站的config文件和WinForm的config文件
-
/// 作者:周公
-
/// 日期:2008-08-23
-
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
-
///
-
public enum ConfigType
- {
-
///
-
/// asp.net网站的config文件
-
///
- WebConfig = 1,
-
///
-
/// Windows应用程序的config文件
-
///
- ExeConfig = 2
- }
-
///
-
/// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
-
/// 可以对网站和应用程序的配置文件进行修改
-
/// 作者:周公
-
/// 日期:2008-08-23
-
/// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
-
///
-
public class ConfigurationOperator
- {
-
private Configuration config;
-
private string configPath;
-
private ConfigType configType;
-
///
-
/// 对应的配置文件
-
///
-
public Configuration Configuration
- {
-
get { return config; }
-
set { config = value; }
- }
-
///
-
/// 构造函数
-
///
-
/// .config文件的类型,只能是网站配置文件或者应用程序配置文件
-
public ConfigurationOperator(ConfigType configType)
- {
-
this.configType = configType;
-
if (configType == ConfigType.ExeConfig)
- {
-
configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory;
- }
-
else
- {
- configPath = HttpContext.Current.Request.ApplicationPath;
- }
- Initialize();
- }
-
///
-
/// 构造函数
-
///
-
/// .config文件的位置
-
/// .config文件的类型,只能是网站配置文件或者应用程序配置文件
-
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);
- }
- }
-
///
-
/// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
-
///
-
/// 节点名称
-
/// 节点值
-
public void AddAppSetting(string key, string value)
- {
-
AppSettingsdiv appSetting = (AppSettingsdiv)config.Getdiv("appSettings");
-
if (appSetting.Settings[key] == null)//如果不存在此节点,则添加
- {
- appSetting.Settings.Add(key, value);
- }
-
else//如果存在此节点,则修改
- {
- ModifyAppSetting(key, value);
- }
- }
-
///
-
/// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
-
///
-
/// 节点名称
-
/// 节点值
-
public void AddConnectionString(string key, string connectionString)
- {
-
ConnectionStringsdiv connectionSetting = (ConnectionStringsdiv)config.Getdiv("connectionStrings");
-
if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加
- {
-
ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
- connectionSetting.ConnectionStrings.Add(connectionStringSettings);
- }
-
else//如果存在此节点,则修改
- {
- ModifyConnectionString(key, connectionString);
- }
- }
-
///
-
/// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
-
///
-
/// 节点名称
-
/// 节点值
-
public void ModifyAppSetting(string key, string newValue)
- {
-
AppSettingsdiv appSetting = (AppSettingsdiv)config.Getdiv("appSettings");
-
if (appSetting.Settings[key] != null)//如果存在此节点,则修改
- {
- appSetting.Settings[key].Value = newValue;
- }
-
else//如果不存在此节点,则添加
- {
- AddAppSetting(key, newValue);
- }
- }
-
///
-
/// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
-
///
-
/// 节点名称
-
/// 节点值
-
public void ModifyConnectionString(string key, string connectionString)
- {
-
ConnectionStringsdiv connectionSetting = (ConnectionStringsdiv)config.Getdiv("connectionStrings");
-
if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改
- {
- connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
- }
-
else//如果不存在此节点,则添加
- {
- AddConnectionString(key, connectionString);
- }
- }
-
///
-
/// 保存所作的修改
-
///
-
public void Save()
- {
- config.Save();
- }
- }
- }
用法实例:
(一)WebForm中的用法
-
ConfigurationOperator co = new ConfigurationOperator(ConfigType.WebConfig);
-
string key = txtConnectionStringKey.Text;
-
string value = txtConnectionStringValue.Text;
- co.AddConnectionString(key, value);
- co.Save();
(二)WinForm中的用法
-
ConfigurationOperator co = new ConfigurationOperator(ConfigType.ExeConfig);
-
co.AddAppSetting("Font-Size", "9");
-
co.AddAppSetting("WebSite", "http://blog.csdn.net/zhoufoxcn");
-
co.AddConnectionString("Connection", "test");
-
co.Save();//保存写入结果
我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):
-
xml version="1.0" encoding="utf-8" ?>
-
configuration>
-
appSettings>
-
add key="Font-Size" value="9" />
-
add key="WebSite" value="http://blog.csdn.net/zhoufoxcn" />
-
appSettings>
-
connectionStrings>
-
add name="Connection" connectionString="test" />
-
connectionStrings>
-
configuration>
经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn