.net2.0中对config文件的操作方法总结

配置文件操作指南
本文介绍如何使用.NET Framework中的System.Configuration命名空间来读取和修改app.config或web.config文件。包括添加、修改应用设置及数据库连接字符串的方法。
在.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. XmlDocumentdocument=LoadXml();
  3. XmlNoderoot=document.DocumentElement;
  4. XmlNodeListnodeList=root.FirstChild.ChildNodes;
  5. for(inti=0;i<nodeList.Count;i++)
  6. {
  7. stringkey=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. Configurationconfig=System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);

对于WinForm的config文件,可以用如下代码得到Configuration类的实例:

  1. Configurationconfig=System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);

需要注意的是,对文件进行写操作之后,需要调用Save()方法保存结果。整个程序的源代码如下,并附有详细代码注释。

  1. usingSystem;
  2. usingSystem.Configuration;
  3. usingSystem.Web;
  4. usingSystem.Windows.Forms;
  5. namespaceNetSkycn.Common
  6. {
  7. ///<summary>
  8. ///说明:Config文件类型枚举,
  9. ///分别为asp.net网站的config文件和WinForm的config文件
  10. ///作者:周公
  11. ///日期:2008-08-23
  12. ///首发地址:http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/24/2823508.aspx
  13. ///</summary>
  14. publicenumConfigType
  15. {
  16. ///<summary>
  17. ///asp.net网站的config文件
  18. ///</summary>
  19. WebConfig=1,
  20. ///<summary>
  21. ///Windows应用程序的config文件
  22. ///</summary>
  23. ExeConfig=2
  24. }
  25. ///<summary>
  26. ///说明:本类主要负责对程序配置文件(.config)进行修改的类,
  27. ///可以对网站和应用程序的配置文件进行修改
  28. ///作者:周公
  29. ///日期:2008-08-23
  30. ///首发地址:http://blog.youkuaiyun.com/zhoufoxcn/archive/2008/08/24/2823508.aspx
  31. ///</summary>
  32. publicclassConfigurationOperator
  33. {
  34. privateConfigurationconfig;
  35. privatestringconfigPath;
  36. privateConfigTypeconfigType;
  37. ///<summary>
  38. ///对应的配置文件
  39. ///</summary>
  40. publicConfigurationConfiguration
  41. {
  42. get{returnconfig;}
  43. set{config=value;}
  44. }
  45. ///<summary>
  46. ///构造函数
  47. ///</summary>
  48. ///<paramname="configType">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
  49. publicConfigurationOperator(ConfigTypeconfigType)
  50. {
  51. this.configType=configType;
  52. if(configType==ConfigType.ExeConfig)
  53. {
  54. configPath=Application.ExecutablePath;//AppDomain.CurrentDomain.BaseDirectory;
  55. }
  56. else
  57. {
  58. configPath=HttpContext.Current.Request.ApplicationPath;
  59. }
  60. Initialize();
  61. }
  62. ///<summary>
  63. ///构造函数
  64. ///</summary>
  65. ///<paramname="path">.config文件的位置</param>
  66. ///<paramname="type">.config文件的类型,只能是网站配置文件或者应用程序配置文件</param>
  67. publicConfigurationOperator(stringconfigPath,ConfigTypeconfigType)
  68. {
  69. this.configPath=configPath;
  70. this.configType=configType;
  71. Initialize();
  72. }
  73. //实例化configuration,根据配置文件类型的不同,分别采取了不同的实例化方法
  74. privatevoidInitialize()
  75. {
  76. //如果是WinForm应用程序的配置文件
  77. if(configType==ConfigType.ExeConfig)
  78. {
  79. config=System.Configuration.ConfigurationManager.OpenExeConfiguration(configPath);
  80. }
  81. else//WebForm的配置文件
  82. {
  83. config=System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(configPath);
  84. }
  85. }
  86. ///<summary>
  87. ///添加应用程序配置节点,如果已经存在此节点,则会修改该节点的值
  88. ///</summary>
  89. ///<paramname="key">节点名称</param>
  90. ///<paramname="value">节点值</param>
  91. publicvoidAddAppSetting(stringkey,stringvalue)
  92. {
  93. AppSettingsSectionappSetting=(AppSettingsSection)config.GetSection("appSettings");
  94. if(appSetting.Settings[key]==null)//如果不存在此节点,则添加
  95. {
  96. appSetting.Settings.Add(key,value);
  97. }
  98. else//如果存在此节点,则修改
  99. {
  100. ModifyAppSetting(key,value);
  101. }
  102. }
  103. ///<summary>
  104. ///添加数据库连接字符串节点,如果已经存在此节点,则会修改该节点的值
  105. ///</summary>
  106. ///<paramname="key">节点名称</param>
  107. ///<paramname="value">节点值</param>
  108. publicvoidAddConnectionString(stringkey,stringconnectionString)
  109. {
  110. ConnectionStringsSectionconnectionSetting=(ConnectionStringsSection)config.GetSection("connectionStrings");
  111. if(connectionSetting.ConnectionStrings[key]==null)//如果不存在此节点,则添加
  112. {
  113. ConnectionStringSettingsconnectionStringSettings=newConnectionStringSettings(key,connectionString);
  114. connectionSetting.ConnectionStrings.Add(connectionStringSettings);
  115. }
  116. else//如果存在此节点,则修改
  117. {
  118. ModifyConnectionString(key,connectionString);
  119. }
  120. }
  121. ///<summary>
  122. ///修改应用程序配置节点,如果不存在此节点,则会添加此节点及对应的值
  123. ///</summary>
  124. ///<paramname="key">节点名称</param>
  125. ///<paramname="value">节点值</param>
  126. publicvoidModifyAppSetting(stringkey,stringnewValue)
  127. {
  128. AppSettingsSectionappSetting=(AppSettingsSection)config.GetSection("appSettings");
  129. if(appSetting.Settings[key]!=null)//如果存在此节点,则修改
  130. {
  131. appSetting.Settings[key].Value=newValue;
  132. }
  133. else//如果不存在此节点,则添加
  134. {
  135. AddAppSetting(key,newValue);
  136. }
  137. }
  138. ///<summary>
  139. ///修改数据库连接字符串节点,如果不存在此节点,则会添加此节点及对应的值
  140. ///</summary>
  141. ///<paramname="key">节点名称</param>
  142. ///<paramname="value">节点值</param>
  143. publicvoidModifyConnectionString(stringkey,stringconnectionString)
  144. {
  145. ConnectionStringsSectionconnectionSetting=(ConnectionStringsSection)config.GetSection("connectionStrings");
  146. if(connectionSetting.ConnectionStrings[key]!=null)//如果存在此节点,则修改
  147. {
  148. connectionSetting.ConnectionStrings[key].ConnectionString=connectionString;
  149. }
  150. else//如果不存在此节点,则添加
  151. {
  152. AddConnectionString(key,connectionString);
  153. }
  154. }
  155. ///<summary>
  156. ///保存所作的修改
  157. ///</summary>
  158. publicvoidSave()
  159. {
  160. config.Save();
  161. }
  162. }
  163. }

用法实例:
(一)WebForm中的用法

  1. ConfigurationOperatorco=newConfigurationOperator(ConfigType.WebConfig);
  2. stringkey=txtConnectionStringKey.Text;
  3. stringvalue=txtConnectionStringValue.Text;
  4. co.AddConnectionString(key,value);
  5. co.Save();

(二)WinForm中的用法

  1. ConfigurationOperatorco=newConfigurationOperator(ConfigType.ExeConfig);
  2. co.AddAppSetting("Font-Size","9");
  3. co.AddAppSetting("WebSite","http://blog.youkuaiyun.com/zhoufoxcn");
  4. co.AddConnectionString("Connection","test");
  5. co.Save();//保存写入结果

我在WinForm里加入了一个空白的app.config文件,经过上面的操作得到如下结果(这个文件是和最后生成的exe文件在同一个目录下,而不是和源代码在同一文件夹下的那个config文件):

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <configuration>
  3. <appSettings>
  4. <addkey="Font-Size"value="9"/>
  5. <addkey="WebSite"value="http://blog.youkuaiyun.com/zhoufoxcn"/>
  6. </appSettings>
  7. <connectionStrings>
  8. <addname="Connection"connectionString="test"/>
  9. </connectionStrings>
  10. </configuration>

经过这个封装类可以简化对config配置文件的操作,仅仅是需要在实例化Configuration类的实例时指明打开的是网站还是应用程序的config文件,并且在进行了所有修改和增加操作之后调用Save()方法保存所做的修改即可。需要注意的是:要想把上面的程序作为类库编译,需要添加对System.Web.dll和System.Windows.Forms.dll和System.Configuration.dll类库的引用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值