• .NET中对config文件的操作方法总结


    在.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文件
        /// 作者:周公
        /// 日期:2008-08-23
        /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
        /// </summary>
        public enum ConfigType
        {
            /// <summary>
            /// asp.net网站的config文件
            /// </summary>
            WebConfig = 1,
            /// <summary>
            /// Windows应用程序的config文件
            /// </summary>
            ExeConfig = 2
        }

        /// <summary>
        /// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
        /// 可以对网站和应用程序的配置文件进行修改
        /// 作者:周公
        /// 日期:2008-08-23
        /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
        /// </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();
            }
        }
    }
     

    用法实例:
    (一)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类库的引用。

  • 相关阅读:
    物料描述不可更新(分配组织后)
    完工任务不允许更改需求
    作业需求更改,限制车间人员只允许修改子库
    只允许更改**类型的任务需求
    车间任务移动完工时检验倒冲子库
    有库存不能停用子库存
    不允许修改标准作业需求
    PHP关于重写与重载
    面向对象的三个基本特征 封装 继承 多态
    PHP中的面向对象 中的类(class)
  • 原文地址:https://www.cnblogs.com/tonybinlj/p/1446088.html
Copyright © 2020-2023  润新知