您现在的位置是:首页 >

.net Framework提供配置文件操作

火烧 2022-07-04 01:41:59 1044
. et Framework提供配置文件操作 ame ace Sy tem Co figuratio 创建配置节类必须创建继承自Co figuratio Sectio 的对象才能进行配置数据读写操作

.net Framework提供配置文件操作  

.net Framework提供配置文件操作
namespace System Configuration; 创建配置节类必须创建继承自ConfigurationSection的对象才能进行配置数据读写操作 ConfigurationSection提供了索引器用来获取和设置配置数据 需要注意的是拥有ConfigurationProperty特性的属性才会被存储 并且名称要保持大小写完全一致 如下面的代码中 所有的 id 必须保持一样 class ConfigSectionData : ConfigurationSection{  [ConfigurationProperty( id )]  public int Id  {    get { return (int)this[ id ]; }    set { this[ id ] = value; }  }  [ConfigurationProperty( time )]  public DateTime Time  {    get { return (DateTime)this[ time ]; }    set { this[ time ] = value; }  }} 创建配置文件操作对象 Configuration config = ConfigurationManager OpenExeConfiguration(ConfigurationUserLevel None);ConfigSectionData data = new ConfigSectionData();data Id = ;data Time = DateTime Now;config Sections Add( add data);config Save(ConfigurationSaveMode Minimal);上面的例子是操作 nfig 在根节点(configuration)下写入名称为 add 的配置数据                
        读取配置文件 ExeConfigurationFileMap file = new ExeConfigurationFileMap();file ExeConfigFilename = nfig ;Configuration config = ConfigurationManager OpenMappedExeConfiguration(file ConfigurationUserLevel None);ConfigSectionData data = config SectionGroups[ group ] Sections[ add ] as ConfigSectionData;//ConfigSectionData data = config Sections[ add ] as ConfigSectionData; // 从根节读取if (data != null){  Console WriteLine(data Id);  Console WriteLine(data Time);}

  写配置文件在写入 ConfigurationSectionGroup 和 ConfigurationSection 前要判断同名配置是否已经存在 否则会写入失败 另外如果配置文件被其他Configuration对象修改 则保存会失败 并抛出异常 建议采用Singleton模式

ExeConfigurationFileMap file = new ExeConfigurationFileMap();file ExeConfigFilename = nfig ;Configuration config = ConfigurationManager OpenMappedExeConfiguration(file ConfigurationUserLevel None);ConfigSectionData data = new ConfigSectionData();data Id = ;data Time = DateTime Now;ConfigurationSectionGroup group = config SectionGroups[ group ];if (group == null)   config SectionGroups Add( group new ConfigurationSectionGroup());ConfigurationSection data = group Sections[ add ] as config;if (add == null)  config SectionGroups[ group ] Sections Add( add data);else{  group Sections Remove( add );  group Sections Add( add data);  // 或者直接修改原配置对象 前提是类型转换要成功   //ConfigSectionData configData = add as ConfigSectionData;  //configData Id = data Id;  //configData Time = data Time;}config Save(ConfigurationSaveMode Minimal); 删除配置节删除ConfigurationSectionGroup config SectionGroups Remove( group );//config SectionGroups Clear();config Save(ConfigurationSaveMode Minimal);删除ConfigurationSection config Sections Remove( add );//config Sections Clear();if (config SectionGroups[ group ] != null){  config SectionGroups[ group ] Sections Remove( add );  //config SectionGroups[ group ] Sections Clear();}config Save(ConfigurationSaveMode Minimal); 其他可以使用 ConfigurationManager OpenMachineConfiguration() 来操作 nfig 文件 或者使用 System Web Configuration 名字空间中的 WebConfigurationManager 类来操作 配置文件 ConfigurationManager还提供了AppSettings ConnectionStrings GetSection()等便捷操作 使用自定义类 补充 回复 ggy 网友的疑问 引用至 ggy 比如ConfigSectionData里面除了简单类型之外 可不可以有自定义的类可以使用自定义类 不过需要定义一个转换器 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 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)  {    return (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 { this[ id ] = value; }  }  [ConfigurationProperty( time )]  public DateTime Time  {    get { return (DateTime)this[ time ]; }    set { this[ time ] = value; }  }  [ConfigurationProperty( custom )]  [TypeConverter(typeof(CustomConvert))] // 指定转换器  public CustomData Custom  {    get { return (CustomData)this[ custom ]; }    set { this[ custom ] = value; }  }}  public class Program{  static void Main(string[] args)  {    Configuration config = ConfigurationManager OpenExeConfiguration(ConfigurationUserLevel None);    ConfigSectionData data = new ConfigSectionData();    data Id = ;    data Time = DateTime Now;    data Custom = new CustomData( abcdefg );    config Sections Add( add data);    config Save(ConfigurationSaveMode Minimal);    // 读取测试    ConfigSectionData configData = (ConfigSectionData)config Sections[ add ];    Console WriteLine(configData Custom S);  }}保存后的配置文件             更详细的信息可以看 MSDN 中关于 System Configuration ConfigurationConverterBase 的说明 lishixinzhi/Article/program/net/201311/12863  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码