版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 读取配置文件方法 读取配置文件方法,需要的朋友可以参考下。方法1: 复制代码 代码如下:System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameValueCollection) System.Configuration.ConfigurationManager.GetSection(sectionName); string keyValue = nvc.GetValues(keyName)0.ToString(); 方法2: 复制代码 代码如下:System.We
2、b.Configuration.WebConfigurationManager.AppSettingskeyName.ToString(); 参考下面的文章在C#中如何读取配置文件 1. 配置文件概述: 应 用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是 configuration。我们经常访问的是appSettings,它是由.Net预定义配置节。我们经常使用的配置文件的架构是象下面的形式。先大 概有个印象,通过后面的实例会有一个比较清楚的认识。下面的“配置节”可以理解
3、为进行配置一个XML的节点。 常见配置文件模式: 复制代码 代码如下:<configuration> <configSections> /配置节声明区域,包含配置节和命名空间声明 <section> /配置节声明 <sectionGroup> /定义配置节组 <section> /配置节组中的配置节声明 <appSettings> /预定义配置节 <Custom element for configuration section> /配置节设置区域 2. 只有appSettings节的配置文件及访问方法 下面是
4、一个最常见的应用程序配置文件的例子,只有appSettings节。 复制代码 代码如下:<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="connectionstring" value="User ID=sa;Data Source=.;Password=;Initial Catalog=test;Provider=SQLOLEDB.1;" /> <add
5、 key="TemplatePATH" value="Template" /> </appSettings> </configuration> 下面来看看这样的配置文件如何方法。 string _connectionString=ConfigurationSettings.AppSettings"connectionstring" 使用ConfigurationSettings类的静态属性AppSettings就可以直接方法配置文件中的配置信息。这个属性的类型是NameValueCollection。 3
6、. 自定义配置文件 3.1自定义配置节 一个用户自定义的配置节,在配置文件中分为两部分:一是在<configSections></ configSections>配置节中声明配置节(上面配置文件模式中的“<section>”),另外是在< configSections></ configSections >之后设置配置节(上面配置文件模式中的“<Custom element for configuration section>”),有点类似一个变量先声明,后使用一样。声明一个配置文件的语句如下: <section n
7、ame=" " type=" "/> <section>:声明新配置节,即可创建新配置节。 name:自定义配置节的名称。 type:自定义配置节的类型,主要包括System.Configuration.SingleTagSectionHandler、 System.Configuration.DictionarySectionHandler、 System.Configuration.NameValueSectionHandler。 不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异。下面我们就举一个配置文件的
8、例子,让它包含这三个不同的type。 复制代码 代码如下:<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="Test1" type="System.Configuration.SingleTagSectionHandler"/> <section name="Test2" type="System.Confi
9、guration.DictionarySectionHandler"/> <section name="Test3" type="System.Configuration.NameValueSectionHandler" /> </configSections> <Test1 setting1="Hello" setting2="World"/> <Test2> <add key="Hello" value="Wor
10、ld" /> </Test2> <Test3> <add key="Hello" value="World" /> </Test3> </configuration> 我们对上面的自定义配置节进行说明。在声明部分使用<section name="Test1" type="System.Configuration.SingleTagSectionHandler"/>声明了一个配置节它的名字叫 Test1,类型为SingleTagS
11、ectionHandler。在设置配置节部分使用 <Test1 setting1="Hello" setting2="World"/>设置了一个配置节,它的第一个设置的值是Hello,第二个值是World,当然还可以有更多。其它的两个配 置节和这个类似。 下面我们看在程序中如何访问这些自定义的配置节。我们用过ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息。 public static object GetConfig(string sectionName); 下面是访问这三个配置节的代码: 复
12、制代码 代码如下:/访问配置节Test1 IDictionary IDTest1 = (IDictionary)ConfigurationSettings.GetConfig("Test1"); string str = (string)IDTest1"setting1" +" "+(string)IDTest1"setting2" MessageBox.Show(str); /输出Hello World /访问配置节Test1的方法2 string values1=new stringIDTest1.Count;
13、 IDTest1.Values.CopyTo(values1,0); MessageBox.Show(values10+" "+values11); /输出Hello World /访问配置节Test2 IDictionary IDTest2 = (IDictionary)ConfigurationSettings.GetConfig("Test2"); string keys=new stringIDTest2.Keys.Count; string values=new stringIDTest2.Keys.Count; IDTest2.Keys.Co
14、pyTo(keys,0); IDTest2.Values.CopyTo(values,0); MessageBox.Show(keys0+" "+values0); /访问配置节Test3 NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3"); MessageBox.Show(nc.AllKeys0.ToString()+" "+nc"Hello"); /输出Hello World 通过上面的代码我们
15、可以看出,不同的type通过GetConfig返回的类型不同,具体获得配置内容的方式也不一样。 配置节处理程序 返回类型 复制代码 代码如下:SingleTagSectionHandler Systems.Collections.IDictionary DictionarySectionHandler Systems.Collections.IDictionary NameValueSectionHandler Systems.Collections.Specialized.NameValueCollection 3.2自定义配置节组 配置节组是使用<sectionGroup>元素
16、,将类似的配置节分到同一个组中。配置节组声明 部分将创建配置节的包含元素,在<configSections>元素中声明配置节组,并将属于该组的节置于< sectionGroup>元素中。下面是一个包含配置节组的配置文件的例子: 复制代码 代码如下:<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="TestGroup"> <s
17、ection name="Test" type="System.Configuration.NameValueSectionHandler"/> </sectionGroup> </configSections> <TestGroup> <Test> <add key="Hello" value="World"/> </Test> </TestGroup> </configuration> 下面是访问这个配置节组的
18、代码: NameValueCollection nc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test"); MessageBox.Show(nc.AllKeys0.ToString()+" "+nc"Hello"); /输出Hello World C# 解析配置文件内容 System.Configuration 1. 创建配置节类 必须创建继承自ConfigurationSection的对象才能进行配置数据读写操作,ConfigurationSe
19、ction提供了索引器用来获取和设置配置数据,需要注意的是拥有ConfigurationProperty特性的属性才会被存储,并且名称要保持大小写完全一致,如下面的代码中,所有的"id"必须保持一样。 复制代码 代码如下:class ConfigSectionData : ConfigurationSection ConfigurationProperty("id") public int Id get return (int)this"id" set this"id" = value; Configuration
20、Property("time") public DateTime Time get return (DateTime)this"time" set this"time" = value; 2. 创建配置文件操作对象 复制代码 代码如下:Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); ConfigSectionData data = new ConfigSectionData(); data.Id
21、 = 1000; data.Time = DateTime.Now; config.Sections.Add("add", data); config.Save(ConfigurationSaveMode.Minimal); 上面的例子是操作 app.config,在根节点(configuration)下写入名称为"add"的配置数据。 复制代码 代码如下:<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe
22、ctions> <section name="add" type="ConsoleApplication1.ConfigSectionData, . /> </configSections> <add id="1000" time="02/18/2006 21:51:06" /> </configuration> 需要注意的 VS2005 在IDE模式下会将信息写入 *.vshost.exe.config,并且在程序关闭时覆写该文件,因此您可能看不到您写入的配置数据,只要
23、在资源管理其中执行 *.exe 文件,您就可以在 *.exe.config 文件中看到结果了。 如果我们需要操作非缺省配置文件,可以使用ExeConfigurationFileMap对象。 复制代码 代码如下:ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = "test.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, Configu
24、rationUserLevel.None); ConfigSectionData data = new ConfigSectionData(); data.Id = 1000; data.Time = DateTime.Now; config.Sections.Add("add", data); config.Save(ConfigurationSaveMode.Minimal); 如果我们不希望在根节点下写入配置数据,可以使用ConfigurationSectionGroup对象。 复制代码 代码如下:ExeConfigurationFileMap file = new
25、ExeConfigurationFileMap(); file.ExeConfigFilename = "test.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); ConfigSectionData data = new ConfigSectionData(); data.Id = 1000; data.Time = DateTime.Now; config.SectionGroups.Add(
26、"group1", new ConfigurationSectionGroup(); config.SectionGroups"group1".Sections.Add("add", data); config.Save(ConfigurationSaveMode.Minimal); 下面就是生成的配置文件。 复制代码 代码如下:<?xml version="1.0" encoding="utf-8"?> <configuration> <configSection
27、s> <sectionGroup name="group1" type="System.Configuration.ConfigurationSectionGroup, . > <section name="add" type="ConsoleApplication1.ConfigSectionData, . /> </sectionGroup> </configSections> <group1> <add id="1000" time=&q
28、uot;02/18/2006 22:01:02" /> </group1> </configuration> 3. 读取配置文件 复制代码 代码如下:ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = "test.config" Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUser
29、Level.None); ConfigSectionData data = config.SectionGroups"group1".Sections"add" as ConfigSectionData; /ConfigSectionData data = config.Sections"add" as ConfigSectionData; / 从根节读取 if (data != null) Console.WriteLine(data.Id); Console.WriteLine(data.Time); 4. 写配置文件 在写入 C
30、onfigurationSectionGroup 和 ConfigurationSection 前要判断同名配置是否已经存在,否则会写入失败。 另外如果配置文件被其他Configuration对象修改,则保存会失败,并抛出异常。建议采用Singleton模式。 复制代码 代码如下:ExeConfigurationFileMap file = new ExeConfigurationFileMap(); file.ExeConfigFilename = "test.config" Configuration config = ConfigurationManager.Open
31、MappedExeConfiguration(file, ConfigurationUserLevel.None); ConfigSectionData data = new ConfigSectionData(); data.Id = 2000; data.Time = DateTime.Now; ConfigurationSectionGroup group1 = config.SectionGroups"group1" if (group1 = null) config.SectionGroups.Add("group1", new Configu
32、rationSectionGroup(); ConfigurationSection data = group1.Sections"add" as config; if (add = null) config.SectionGroups"group1".Sections.Add("add", data); else group1.Sections.Remove("add"); group1.Sections.Add("add", data); / 或者直接修改原配置对象,前提是类型转换要成功。
33、/ConfigSectionData configData = add as ConfigSectionData; /configData.Id = data.Id; /configData.Time = data.Time; config.Save(ConfigurationSaveMode.Minimal); 5. 删除配置节 复制代码 代码如下:删除ConfigurationSectionGroup config.SectionGroups.Remove("group1"); /config.SectionGroups.Clear(); config.Save(Con
34、figurationSaveMode.Minimal); 删除ConfigurationSection config.Sections.Remove("add1"); /config.Sections.Clear(); if (config.SectionGroups"group1" != null) config.SectionGroups"group1".Sections.Remove("add2"); /config.SectionGroups"group1".Sections.Clear
35、(); config.Save(ConfigurationSaveMode.Minimal); 6. 其他 可以使用 ConfigurationManager.OpenMachineConfiguration() 来操作 Machine.config 文件。 或者使用 System.Web.Configuration 名字空间中的 WebConfigurationManager 类来操作 ASP.net 配置文件。 ConfigurationManager还提供了AppSettings、ConnectionStrings、GetSection()等便捷操作。 7. 使用自定义类 可以使用自定义
36、类,不过需要定义一个转换器。 复制代码 代码如下:using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Globalization; using System.ComponentModel; / 要写入配置文件的自定义类 class CustomData public CustomData(string s) this.s = s; private string s; public string S get return
37、 s; set s = value; / 自定义的转换器(演示代码省略了类型判断) class CustomConvert : ConfigurationConverterBase public override bool CanConvertFrom(ITypeDescriptorContext ctx, Type type) return (type = typeof(string); public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type type) r
38、eturn (value as CustomData).S; public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data) return new CustomData(string)data); class ConfigSectionData : ConfigurationSection ConfigurationProperty("id") public int Id get return (int)this"id" set thi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度知识产权保护合同咨询及代理服务协议3篇
- 二零二五版古董家具修复、安装与展览服务合同3篇
- 二零二五年服装店转让合同书附带品牌形象重塑及宣传推广服务3篇
- 二零二五版噪声污染检测与控制合同3篇
- 二零二五年度智能家居代理出租房租赁合同2篇
- 二零二五年杭州二手房买卖合同贷款与还款指导合同3篇
- 二零二五年金融科技公司股份代持与金融信息服务合同3篇
- 二零二五版房地产开发项目施工许可证报建代理合同3篇
- 二零二五版餐饮企业食品安全责任承包合同范本3篇
- 二零二五版古建筑保护监理服务增补合同2篇
- 危险性较大分部分项工程及施工现场易发生重大事故的部位、环节的预防监控措施
- 继电保护试题库(含参考答案)
- 《榜样9》观后感心得体会四
- 2023事业单位笔试《公共基础知识》备考题库(含答案)
- 《水下抛石基床振动夯实及整平施工规程》
- 化学-广东省广州市2024-2025学年高一上学期期末检测卷(一)试题和答案
- 2025年云南大理州工业投资(集团)限公司招聘31人管理单位笔试遴选500模拟题附带答案详解
- 风电危险源辨识及控制措施
- 《教师职业道德与政策法规》课程教学大纲
- 营销策划 -丽亭酒店品牌年度传播规划方案
- 儿童传染病预防课件
评论
0/150
提交评论