zoukankan      html  css  js  c++  java
  • Config配置文件读写

    config文件读写操作(文字说明附加在程序中)

    App.config文件

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <!--自定义结点(为正常注册,将此节点放在第一)-->
        <configSections>
            <section name="Node1" type="Config.Test1,Config"/> <!--命名空间.类名,类名-->
            <section name="Node2" type="Config.Test2,Config"/>
            <section name="Node3" type="Config.Test3,Config"/>
            <section name="Node4" type="Config.Test4,Config"/>
        </configSections>
        <Node1 Property1="属性1" Property2="属性2"></Node1>
        <Node2>
            <Property Property1="属性1" Property2="属性2"></Property>
        </Node2>
        <Node3>
            <T1>
                <!--CDATA可以包含比较长的字符串,且可以包含HTML代码段,这样针对特殊字符的存放也比较方便。-->
                <![CDATA[
                    长字符串在此设置
                ]]>
            </T1>
            <T2>
                <![CDATA[
                    <html><head>HTML代码</head></html>
                ]]>
            </T2>
        </Node3>
        <Node4>
            <add key="1" value="test1"></add>
            <add key="2" value="test2"></add>
            <add key="3" value="test3"></add>
            <add key="4" value="test4"></add>
        </Node4>
        <!--connectionStrings连接数据库的配置-->
        <connectionStrings>
            <add name="ConString" connectionString="server=.;database=DB;uid=sa;pwd=123456"/>
            <!--或 没有密码的连接-->
            <!--add name="ConnStr" connectionString="Data Source=PC-201307122356SQLEXPRESS;Initial Catalog=DZServe; Integrated Security=SSPI "/-->
        </connectionStrings>
        <!--appSettings连接数据库的配置或读取配置值-->
        <appSettings>
            <add key="AppString" value="server=.;database=DB;uid=sa;pwd=123456"/>
            <!--或 没有密码的连接-->
            <!--add key="AppString" value="Data Source=PC-201307122356SQLEXPRESS;Initial Catalog=DZServe; Integrated Security=SSPI "/-->
        </appSettings>
    </configuration>
    View Code

    自定义结点1(Node1)的类Test1

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Config
    {
        //自定义一个Test类,以ConfigurationSection为基类,各个属性加上[ConfigurationProperty]
        public class Test1:ConfigurationSection
        {
            [ConfigurationProperty("Property1")]
            public string Property1
            {
                get { return this["Property1"].ToString(); }
                set { this["Property1"] = value; }
            }
    
            [ConfigurationProperty("Property2")]
            public string Property2
            {
                get { return this["Property2"].ToString(); }
                set { this["Property2"] = value; }
            }
        }
    }
    View Code

    自定义结点2(Node2)的类Test2

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Config
    {
        public class Test2:ConfigurationSection
        {
            [ConfigurationProperty("Property",IsRequired=true)]
            public SectionElement Property
            {
                get{ return (SectionElement)this["Property"];}
            }
            
    
            public class SectionElement:ConfigurationElement
            {
                [ConfigurationProperty("Property1", IsRequired = true)]
                public string Property1
                {
                    get { return this["Property1"].ToString(); }
                    set { this["Property1"] = value; }
                }
                [ConfigurationProperty("Property2", IsRequired = true)]
                public string Property2
                {
                    get { return this["Property2"].ToString(); }
                    set { this["Property2"] = value; }
                }
            }
        }
    }
    View Code

    自定义结点3(Node3)的类Test3

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Config
    {
        public class Test3:ConfigurationSection
        {
            [ConfigurationProperty("T1", IsRequired = true)]
            public MyTextElement T1
            {
                get { return (MyTextElement)this["T1"]; }
            }
             [ConfigurationProperty("T2", IsRequired = true)]
            public MyTextElement T2
            {
                get { return (MyTextElement)this["T2"]; }
            }
        }
    
       
        public class MyTextElement : ConfigurationElement
        {
            [ConfigurationProperty("data",IsRequired=true)]
            public string CommandText
            {
                get { return this["data"].ToString(); }
                set { this["data"] = value; }
            }
    
            //这里由我们控制对数据的读写操作,也就是要重载方法SerializeElement,DeserializeElement。
            protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey)
            {
                CommandText = reader.ReadElementContentAs(typeof(string), null) as string;
            }
    
            protected override bool SerializeElement(System.Xml.XmlWriter writer, bool serializeCollectionKey)
            {
                if (writer != null)
                {
                    writer.WriteCData(CommandText);
                }
                return true;
            }
    
        }
    }
    View Code

    自定义结点4(Node4)的类Test4

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace Config
    {
        public class Test4:ConfigurationSection
        {
            private static readonly ConfigurationProperty s_property =
                new ConfigurationProperty(string.Empty, typeof(MyKeyValueCollection), null, ConfigurationPropertyOptions.IsDefaultCollection);
            [ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)]
            public MyKeyValueCollection KeyValues
            {
                get { return (MyKeyValueCollection)base[s_property]; }
            }
        }
    
    
    
        [ConfigurationCollection(typeof(MyKeyValueSetting))]
        public class MyKeyValueCollection:ConfigurationElementCollection  //自定义一个集合
        {
            // 基本上,所有的方法都只要简单地调用基类的实现就可以了。
            public MyKeyValueCollection()
                : base(StringComparer.OrdinalIgnoreCase)  //不区分大小写
            { }
    
            // 其实关键就是这个索引器。但它也是调用基类的实现,只是做下类型转就行了。
            new public MyKeyValueSetting this[string name]
            {
                get 
                {
                    return (MyKeyValueSetting)base.BaseGet(name);
                }
            }
            // 下面二个方法中抽象类中必须要实现的。
            protected override ConfigurationElement CreateNewElement()
            {
                return new MyKeyValueSetting();
            }
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((MyKeyValueSetting)element).Key;
            }
    
            // 说明:如果不需要在代码中修改集合,可以不实现Add, Clear, Remove
            public void Add(MyKeyValueSetting setting)
            {
                base.BaseAdd(setting);
            }
            public void Clear()
            {
                base.BaseClear();
            }
            public void Remove(string name)
            {
                base.BaseRemove(name);
            }
        }
    
        public class MyKeyValueSetting:ConfigurationElement  //集合中的每个元素
        {
            [ConfigurationProperty("key", IsRequired = true)]
            public string Key
            {
                get { return this["key"].ToString(); }
                set { this["key"] = value; }
            }
            [ConfigurationProperty("value", IsRequired = true)]
            public string Value
            {
                get { return this["value"].ToString(); }
                set { this["value"] = value; }
            }
        }
    }
    View Code

    读取配置信息

     //connectionStrings结点验证
            private void btnConnectionStrings_Click(object sender, EventArgs e)
            {
                //需添加System.configuration引用,引用—添加引用—.NET—System.configuration
                string connectionStrings = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
                if (string.IsNullOrEmpty(connectionStrings))
                {
                    connectionStrings = "没有读到数据!";
                }
                txbConRead.Text=connectionStrings;
            }
    
            //AppStrings结点验证
            private void btnAppSettings_Click(object sender, EventArgs e)
            {
                string appSettings = ConfigurationManager.AppSettings["AppString"];
                if (string.IsNullOrEmpty(appSettings))
                {
                    appSettings = "没有读到数据!";
                }
                txbAppRead.Text = appSettings;
            }
            #region 自定义结点读取
    
            //第一种方式读取自定义结点
            private void btnPro1Read_Click(object sender, EventArgs e)
            {
                Test1 test1 = (Test1)ConfigurationManager.GetSection("Node1"); 
                txbPro11Read.Text = test1.Property1;
                txbPro21Read.Text = test1.Property2;
            }
            //第二种方式读取自定义结点
            private void btnPro2Read_Click(object sender, EventArgs e)
            {
                Test2 test2 = (Test2)ConfigurationManager.GetSection("Node2");
                txbPro12Read.Text = test2.Property.Property1;
                txbPro22Read.Text = test2.Property.Property2;
            }
    
    
            //第三种方式读取自定义结点
            private void btnPro3Read_Click(object sender, EventArgs e)
            {
                Test3 test3 = (Test3)ConfigurationManager.GetSection("Node3");
                txbPro13Read.Text = test3.T1.CommandText.Trim();
                txbPro23Read.Text = test3.T2.CommandText.Trim();
            }
    
            //第四种方式读取自定义结点
            private void btnPro4Read_Click(object sender, EventArgs e)
            {
                Test4 test4 = (Test4)ConfigurationManager.GetSection("Node4");
                txbtest4Read.Text = string.Join("
    ", (
                                                        from kv in test4.KeyValues.Cast<MyKeyValueSetting>()
                                                        let s = string.Format("{0}={1}", kv.Key, kv.Value)
                                                        select s).ToArray()
                                                      );
            }
            #endregion
    View Code

    写入配置信息

     #region 自定义结点写入
            /*
             * 在修改配置节点前,我们需要调用ConfigurationManager.OpenExeConfiguration(),然后调用config.GetSection()在得到节点后,
             * 转成我们定义的节点类型, 然后就可以按照强类型的方式来修改我们定义的各参数项,最后调用config.Save();即可。 
             * .net为了优化配置节点的读取操作,会将数据缓存起来,如果希望使用修改后的结果生效,您还需要调用ConfigurationManager.RefreshSection方法。
             * 如果是修改web.config,则需要使用 WebConfigurationManager。
             */
    
            //写入connectionStrings结点
            private void btnConWrite_Click(object sender, EventArgs e)
            {
                //ConnectionStringSettings s = new ConnectionStringSettings("ConString1", "server=127.0.0.1;database=DB;uid=sa;pwd=123456");
                //ConfigurationManager.ConnectionStrings.Add(s);
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.ConnectionStrings.ConnectionStrings["ConString"].ConnectionString = txbConWrite.Text;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("connectionStrings");
                MessageBox.Show("修改成功!");
                txbConWrite.Text = "";
            }
    
            //写入AppStrings结点
            private void btnAppWrite_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.AppSettings.Settings["AppString"].Value = txbAppWrtite.Text;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                MessageBox.Show("修改成功!");
                txbAppWrtite.Text = "";
            }
    
            //第一种方式写入自定义结点
            private void btnPro1Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test1 test1 = config.GetSection("Node1") as Test1;
                test1.Property1 = txbPro11Write.Text;
                test1.Property2 = txbPro21Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node1"); //刷新
                MessageBox.Show("修改成功!");
                txbPro11Write.Text = "";
                txbPro21Write.Text = "";
            }
    
            //第二种方式写入自定义结点
            private void btnPro2Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test2 test2 = config.GetSection("Node2") as Test2;
                test2.Property.Property1 = txbPro12Write.Text;
                test2.Property.Property2 = txbPro22Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node2");//刷新
                MessageBox.Show("修改成功!");
                txbPro12Write.Text = "";
                txbPro22Write.Text = "";
            }
    
            //第三种方式写入自定义结点
            private void btnPro3Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test3 test3 = config.GetSection("Node3") as Test3;
                test3.T1.CommandText = txbPro13Write.Text;
                test3.T2.CommandText = txbPro23Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node3");
                MessageBox.Show("修改成功!");
                txbPro13Write.Text = "";
                txbPro23Write.Text = "";
            }
    
            //第四种方式写入自定义结点
            private void btnPro4Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test4 test4 = config.GetSection("Node4") as Test4;
                test4.KeyValues.Clear();
                (
                    from s in txbtest4Write.Lines
                    let p = s.IndexOf('=')
                    where p > 0
                    select new MyKeyValueSetting { Key = s.Substring(0, p), Value = s.Substring(p + 1) }
                ).ToList()
                .ForEach(kv => test4.KeyValues.Add(kv));
                config.Save();
                ConfigurationManager.RefreshSection("Node4");
                MessageBox.Show("修改成功!");
                txbtest4Write.Text = "";
            }
            #endregion
    View Code

    完整的读写方法

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Configuration;
    using System.Xml;
    
    namespace Config
    {
        public partial class ConfigCheck : Form
        {
            public ConfigCheck()
            {
                InitializeComponent();
            }
    
            //connectionStrings结点验证
            private void btnConnectionStrings_Click(object sender, EventArgs e)
            {
                //需添加System.configuration引用,引用—添加引用—.NET—System.configuration
                string connectionStrings = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
                if (string.IsNullOrEmpty(connectionStrings))
                {
                    connectionStrings = "没有读到数据!";
                }
                txbConRead.Text=connectionStrings;
            }
    
            //AppStrings结点验证
            private void btnAppSettings_Click(object sender, EventArgs e)
            {
                string appSettings = ConfigurationManager.AppSettings["AppString"];
                if (string.IsNullOrEmpty(appSettings))
                {
                    appSettings = "没有读到数据!";
                }
                txbAppRead.Text = appSettings;
            }
            #region 自定义结点读取
    
            //第一种方式读取自定义结点
            private void btnPro1Read_Click(object sender, EventArgs e)
            {
                Test1 test1 = (Test1)ConfigurationManager.GetSection("Node1"); 
                txbPro11Read.Text = test1.Property1;
                txbPro21Read.Text = test1.Property2;
            }
            //第二种方式读取自定义结点
            private void btnPro2Read_Click(object sender, EventArgs e)
            {
                Test2 test2 = (Test2)ConfigurationManager.GetSection("Node2");
                txbPro12Read.Text = test2.Property.Property1;
                txbPro22Read.Text = test2.Property.Property2;
            }
    
    
            //第三种方式读取自定义结点
            private void btnPro3Read_Click(object sender, EventArgs e)
            {
                Test3 test3 = (Test3)ConfigurationManager.GetSection("Node3");
                txbPro13Read.Text = test3.T1.CommandText.Trim();
                txbPro23Read.Text = test3.T2.CommandText.Trim();
            }
    
            //第四种方式读取自定义结点
            private void btnPro4Read_Click(object sender, EventArgs e)
            {
                Test4 test4 = (Test4)ConfigurationManager.GetSection("Node4");
                txbtest4Read.Text = string.Join("
    ", (
                                                        from kv in test4.KeyValues.Cast<MyKeyValueSetting>()
                                                        let s = string.Format("{0}={1}", kv.Key, kv.Value)
                                                        select s).ToArray()
                                                      );
            }
            #endregion
    
    
            #region 自定义结点写入
            /*
             * 在修改配置节点前,我们需要调用ConfigurationManager.OpenExeConfiguration(),然后调用config.GetSection()在得到节点后,
             * 转成我们定义的节点类型, 然后就可以按照强类型的方式来修改我们定义的各参数项,最后调用config.Save();即可。 
             * .net为了优化配置节点的读取操作,会将数据缓存起来,如果希望使用修改后的结果生效,您还需要调用ConfigurationManager.RefreshSection方法。
             * 如果是修改web.config,则需要使用 WebConfigurationManager。
             */
    
            //写入connectionStrings结点
            private void btnConWrite_Click(object sender, EventArgs e)
            {
                //ConnectionStringSettings s = new ConnectionStringSettings("ConString1", "server=127.0.0.1;database=DB;uid=sa;pwd=123456");
                //ConfigurationManager.ConnectionStrings.Add(s);
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.ConnectionStrings.ConnectionStrings["ConString"].ConnectionString = txbConWrite.Text;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("connectionStrings");
                MessageBox.Show("修改成功!");
                txbConWrite.Text = "";
            }
    
            //写入AppStrings结点
            private void btnAppWrite_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.AppSettings.Settings["AppString"].Value = txbAppWrtite.Text;
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("appSettings");
                MessageBox.Show("修改成功!");
                txbAppWrtite.Text = "";
            }
    
            //第一种方式写入自定义结点
            private void btnPro1Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test1 test1 = config.GetSection("Node1") as Test1;
                test1.Property1 = txbPro11Write.Text;
                test1.Property2 = txbPro21Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node1"); //刷新
                MessageBox.Show("修改成功!");
                txbPro11Write.Text = "";
                txbPro21Write.Text = "";
            }
    
            //第二种方式写入自定义结点
            private void btnPro2Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test2 test2 = config.GetSection("Node2") as Test2;
                test2.Property.Property1 = txbPro12Write.Text;
                test2.Property.Property2 = txbPro22Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node2");//刷新
                MessageBox.Show("修改成功!");
                txbPro12Write.Text = "";
                txbPro22Write.Text = "";
            }
    
            //第三种方式写入自定义结点
            private void btnPro3Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test3 test3 = config.GetSection("Node3") as Test3;
                test3.T1.CommandText = txbPro13Write.Text;
                test3.T2.CommandText = txbPro23Write.Text;
                config.Save();
                ConfigurationManager.RefreshSection("Node3");
                MessageBox.Show("修改成功!");
                txbPro13Write.Text = "";
                txbPro23Write.Text = "";
            }
    
            //第四种方式写入自定义结点
            private void btnPro4Write_Click(object sender, EventArgs e)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                Test4 test4 = config.GetSection("Node4") as Test4;
                test4.KeyValues.Clear();
                (
                    from s in txbtest4Write.Lines
                    let p = s.IndexOf('=')
                    where p > 0
                    select new MyKeyValueSetting { Key = s.Substring(0, p), Value = s.Substring(p + 1) }
                ).ToList()
                .ForEach(kv => test4.KeyValues.Add(kv));
                config.Save();
                ConfigurationManager.RefreshSection("Node4");
                MessageBox.Show("修改成功!");
                txbtest4Write.Text = "";
            }
            #endregion
    
            
    
        }
    }
    View Code

    效果图

    参考网站:http://www.cnblogs.com/aehyok/p/3558661.html

  • 相关阅读:
    软件测试拓展及视频教程
    LR性能测试课程及视频教程
    WEB自动化测试(UFT与Selenium)课程及视频教程
    WEB测试重点及视频教程
    web软件测试基础系统测试简化理论
    Python学习之路——day03
    Python文件常用的三个变量
    python的文件打开
    Python遍历字典
    Python学习之路——day02
  • 原文地址:https://www.cnblogs.com/zxd543/p/3564613.html
Copyright © 2011-2022 走看看