在.net编程中,我们经常用到config文件来保存一些常用的应用程序配置信息,在WinForm中这个文件名字是app.config,在 asp.net中叫web.config。这个.config文件其实就是一个xml文件,对它的读操作微软已经提供了一个类来实现了,这个类就是 System.Configuration.ConfigurationManager,下面分别是例子:
1. //读取config里名称为“conn”数据库连接信息
   2.      connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
   3. //读取config里名称为"Font_Size"的应用程序配置信息
   4. System.Configuration.ConfigurationManager.AppSettings["Font-Size"] = 9;
不过利用这个类却不能对config文件进行写操作。对于config文件的写操作,很多人通过xml的方式来进行,按照xml的方式进行写操作在WinForm下虽然繁琐点,但是毕竟能完成。以下是按照xml文件进行写的例子。
1. #region 保存配置
   2.             XmlDocument document = LoadXml();
   3.             XmlNode root = document.DocumentElement;
   4.             XmlNodeList nodeList = root.FirstChild.ChildNodes;
   5.             for (int i = 0; i < nodeList.Count; i++)
   6.             {
   7.                 string key = nodeList[i].Attributes["key"].Value;
   8.                 if (key == "FilterOption")
   9.                 {
  10.                     nodeList[i].Attributes["value"].Value = ((int)container.FilterOption).ToString();
  11.                 }
  12.             }
  13.             document.Save(configPath);
  14.             #endregion

        但是在WebForm下,往往会因为权限不足而报错。如下图:
本文提供了另外一种方式,利用.net2.0类库里面的Configuration来进行写操作。详细介绍请看下面的详细介绍。
Configuration 是允许进行编程访问以编辑配置文件的类。对于WebForm的config文件,可以用如下代码得到Configuration类的实例:
1. Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
对于WinForm的config文件,可以用如下代码得到Configuration类的实例:
1. Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。
1. using System;
     2. using System.Configuration;
     3. using System.Web;
     4. using System.Windows.Forms;
     5.
     6. namespace NetSkycn.Common
     7. {
     8.         /// <summary>
     9.         /// 说明:Config文件类型枚举,
    10.        /// 分别为asp.net网站的config文件和WinForm的config文件
    11.         /// 作者:周公
    12.         /// 日期:2008-08-23
    13.         ///    
    14.         /// </summary>
    15.         public enum ConfigType
    16.         {
    17.                 /// <summary>
    18.                 /// asp.net网站的config文件
    19.                 /// </summary>
    20.                 WebConfig = 1,
    21.                 /// <summary>
    22.                 /// Windows应用程序的config文件
    23.                 /// </summary>
    24.                 ExeConfig = 2
    25.         }
    26.
    27.         /// <summary>
    28.         /// 说明:本类主要负责对程序配置文件(.config)进行修改的类,
    29.         /// 可以对网站和应用程序的配置文件进行修改
    30.         /// 作者:周公
    31.         /// 日期:2008-08-23
    32.         /// 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2008/08/24/2823508.aspx
    33.         /// </summary>
    34.         public class ConfigurationOperator
    35.         {
    36.                 private Configuration config;
    37.                 private string configPath;
    38.                 private ConfigType configType;
    39.
    40.                 /// <summary>
    41.                 /// 对应的配置文件
    42.                 /// </summary>
    43.                 public Configuration Configuration
    44.                 {
    45.                         get { return config; }
    46.                         set { config = value; }
    47.                 }
    48.                 /// <summary>
    49.                 /// 构造函数
    50.                 /// </summary>
    51.                 /// <param name="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
ConfigurationOperator() ConfigurationOperator(ConfigType configType)
    53.                 {
    54.                         this.configType = configType;
    55.                         if (configType == ConfigType.ExeConfig)
    56.                         {
    57.                                 configPath = Application.ExecutablePath; //AppDomain.CurrentDomain.BaseDirectory;
    58.                         }
    59.                         else
    60.                         {
    61.                                 configPath = HttpContext.Current.Request.ApplicationPath;
    62.                         }
    63.                         Initialize();
    64.                 }
    65.                 /// <summary>
    66.                 /// 构造函数
    67.                 /// </summary>
    68.                 /// <param name="path">.config文件的位置</param>
    69.                 /// <param name="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
ConfigurationOperator() ConfigurationOperator(string configPath, ConfigType configType)
    71.                 {
    72.                         this.configPath = configPath;
    73.                         this.configType = configType;
    74.                         Initialize();
    75.                 }
    76.                 //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法
void Initialize() void Initialize()
    78.                 {
    79.                         //如果是WinForm应用程序的配置文件
    80.                         if (configType == ConfigType.ExeConfig)
    81.                         {
    82.                                 config = System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
    83.                         }
    84.                         else//WebForm的配置文件
    85.                         {
    86.                                 config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
    87.                         }
    88.                 }
    89.
    90.                 /// <summary>
    91.                 /// 添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
    92.                 /// </summary>
    93.                 /// <param name="key">节点名称</param>
    94.                 /// <param name="value">节点值</param>
void AddAppSetting() void AddAppSetting(string key, string value)
    96.                 {
    97.                         AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
    98.                         if (appSetting.Settings[key] == null)//如果不存在此节点,则添加
    99.                         {
100.                                 appSetting.Settings.Add(key, value);
101.                         }
102.                         else//如果存在此节点,则修改
103.                         {
104.                                 ModifyAppSetting(key, value);
105.                         }
106.                 }
107.                 /// <summary>
108.                 /// 添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
109.                 /// </summary>
110.                 /// <param name="key">节点名称</param>
111.                 /// <param name="value">节点值</param>
void AddConnectionString() void AddConnectionString(string key, string connectionString)
113.                 {
114.                         ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
115.                         if (connectionSetting.ConnectionStrings[key] == null)//如果不存在此节点,则添加
116.                         {
117.                                 ConnectionStringSettings connectionStringSettings = new ConnectionStringSettings(key, connectionString);
118.                                 connectionSetting.ConnectionStrings.Add(connectionStringSettings);
119.                         }
120.                         else//如果存在此节点,则修改
121.                         {
122.                                 ModifyConnectionString(key, connectionString);
123.                         }
124.                 }
125.                 /// <summary>
126.                 /// 修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
127.                 /// </summary>
128.                 /// <param name="key">节点名称</param>
129.                 /// <param name="value">节点值</param>
void ModifyAppSetting() void ModifyAppSetting(string key, string newValue)
131.                 {
132.                         AppSettingsSection appSetting = (AppSettingsSection)config.GetSection("appSettings");
133.                         if (appSetting.Settings[key] != null)//如果存在此节点,则修改
134.                         {
135.                                 appSetting.Settings[key].Value = newValue;
136.                         }
137.                         else//如果不存在此节点,则添加
138.                         {
139.                                 AddAppSetting(key, newValue);
140.                         }
141.                 }
142.                 /// <summary>
143.                 /// 修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
144.                 /// </summary>
145.                 /// <param name="key">节点名称</param>
146.                 /// <param name="value">节点值</param>
void ModifyConnectionString() void ModifyConnectionString(string key, string connectionString)
148.                 {
149.                         ConnectionStringsSection connectionSetting = (ConnectionStringsSection)config.GetSection("connectionStrings");
150.                         if (connectionSetting.ConnectionStrings[key] != null)//如果存在此节点,则修改
151.                         {
152.                                 connectionSetting.ConnectionStrings[key].ConnectionString = connectionString;
153.                         }
154.                         else//如果不存在此节点,则添加
155.                         {
156.                                 AddConnectionString(key, connectionString);
157.                         }
158.                 }
159.                 /// <summary>
160.                 /// 保存所作的修改
161.                 /// </summary>
void Save() void Save()
163.                 {
164.                         config.Save();
165.                 }
166.         }
167. }
用法实例:
(一)WebForm中的用法
1. ConfigurationOperator co = new ConfigurationOperator(ConfigType.WebConfig);
   2.         string key = txtConnectionStringKey.Text;
   3.         string value = txtConnectionStringValue.Text;
   4.         co.AddConnectionString(key, value);
   5.         co.Save();
(二)WinForm中的用法
1. ConfigurationOperator co = new ConfigurationOperator(ConfigType.ExeConfig);
   2.             co.AddAppSetting("Font-Size", "9");
   3.             co.AddAppSetting("WebSite", "http://blog.csdn.net/zhoufoxcn");
   4.             co.AddConnectionString("Connection", "test");
   5.             co.Save();//保存写入结果
我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):
1. <?xml version="1.0" encoding="utf-8" ?>
   2. <configuration>
   3.     <appSettings>
   4.         <add key="Font-Size" value="9" />
   5.         <add key="WebSite" value="http://zhoufoxcn.blog.51cto.com" />
   6.     </appSettings>
   7.     <connectionStrings>
   8.         <add name="Connection" connectionString="test" />
   9.     </connectionStrings>
  10. </configuration>
经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。

转载于:https://blog.51cto.com/zhoufoxcn/166844

.net2.0中对config文件的操作方法总结相关推荐

  1. ASP.NET2.0中的App_Data文件的作用

    APP_Data文件夹:包含应用程序数据文件,包括 MDF 文件.XML 文件和其他数据存储文件.ASP.NET 2.0 使用 App_Data 文件夹来存储应用程序的本地数据库,该数据库可用于维护成 ...

  2. ASP.NET2.0中的全球化与本地化UICulture,Culture

    ASP.NET2.0中的全球化与本地化UICulture,Culture 来源:转载 日期:2007-2-28 14:59:01 阅读:324 评论:0   一.简介 全球化和本地化是每一位开发者在创 ...

  3. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  4. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  5. ASP.NET2.0中themes、Skins轻松实现网站换肤!

    ASP.NET2.0中themes.Skins轻松实现网站换肤! 可能有些朋友还不是很清楚themes.skins.下面先介绍下themes.skins.. 一.简介: 一看Themes.Skins这 ...

  6. .net2.0中SqlBulkCopy批量复制数据出错原因分析!

    在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www. ...

  7. 在.net中读写config文件的各种方法(转载)

    阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...

  8. ValidateRequest=false 不在.net2.0 中该怎么办?

    ValidateRequest=false 不在.net2.0 中该怎么办? ASP.NET请求验证功能可以给我提供应用程序的保存,避免站点受到XSS的攻击. 但是在一些情况下,我们需要禁用这个功能, ...

  9. .NET2.0中,Winform程序如何异步调用Web Service呢?[Demo下载]——与.net1.1环境下比较...

    最近在MSDN上看到一个在.NET1.1中Winform程序异步调用WebService的例子 我准备模仿着迁移到.NET2.0环境中,遗憾的是,一切不是那么简单. 首先,.net1.1中调用的Web ...

  10. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

最新文章

  1. PlanAhead工具应用
  2. 苹果电脑怎么设置佳博标签打印机_自动接单、打印快,手动调节音量,佳博推出后厨专用智能打印机...
  3. 为什么不读顶级会议论文?
  4. ajax 解析数组集合,ajax怎样解析json数组并用模板引擎渲染
  5. 大数据可视化常见的三种错误
  6. 国家缩写大全 mysql_所有国家英文缩写
  7. jquery版本之间的冲突
  8. emacs python_将Emacs打造成强大的Python代码编辑工具
  9. 计算机c盘能格式化吗,C盘能格式化吗
  10. Ubuntu20.04安装微信的方法
  11. 【单片机】【数码管】数码管显示
  12. 无法连接虚拟设备 ide1:0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?
  13. 远程桌面怎么记住登录计算机,大神处理windows10电脑远程桌面自动记录登录密码的具体操作办法...
  14. Windows XP 中如何安装 pem 证书
  15. C Primer Plus (第五版) 第十四章 结构和其它数据形式 编程练习
  16. 06_Callable接口
  17. 半物理仿真系统——EPB HIL系统解决方案
  18. 【ISAR成像定标方法(2)—平动目标ISAR成像的运动补偿方法MATLAB仿真】
  19. 【NLP】用ML实现中文短文本分类(二分类)
  20. Lattice开发教程-第一个例程

热门文章

  1. JS学习总结(12)——Math对象/时间对象
  2. 土地覆盖和土地利用的区别
  3. linux显示防火墙端口命令,Linux查询端口是否被防火墙屏蔽 firewall-cmd命令用法
  4. Android Context简单说明
  5. Java并发编程实践笔记(一)
  6. 每天一点正则表达式积累(三)
  7. HDU2612---(两次BFS)
  8. 公众号 多服务器配置_多领国微信官方公众号在线
  9. delphi ado 连接mysql_delphi mysql ado连接
  10. java ssh 项目心得_ssh实训总结(共10篇).docx