Config文件的使用:通过程序修改Config文件
对于config文件,一般情况下都是使用ConfigurationManager加载,然后通过读取相应节点的值来获取想要的数据,但是,有时候需要修改config文件的值,这时候就用到了OpenExeConfiguration()方法。
MSDN上面对该方法的解释:ConfigurationManager.OpenExeConfiguration方法用来把指定的客户端配置文件作为Configuration对象打开,该方法具有两个重载:
名称 | 说明 |
ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel) | 将当前应用程序的配置文件作为 Configuration 对象打开。 |
ConfigurationManager.OpenExeConfiguration (String) | 将指定的客户端配置文件作为 Configuration 对象打开。 |
一、使用OpenExeConfiguration(ConfigurationUserLevel)重载设置当前应用程序的配置文件
客户端应用程序使用应用于所有用户的全局配置、应用于单个用户的单独配置以及应用于漫游用户的配置。userLevel 参数通过指示该配置文件是不具有用户级别(配置文件与应用程序位于同一目录中),还是具有一个依每个用户而定的用户级别(配置文件位于用户级别所确定的应用程序设置路径中),从而确定所打开的配置文件的位置。
通过向 userLevel 传递下列值之一来指定要获取的配置:
若要获取应用于所有用户的 Configuration 对象,请将 userLevel 设置为 None。
若要获取应用于当前用户的本地 Configuration 对象,请将 userLevel 设置为 PerUserRoamingAndLocal。
若要获取应用于当前用户的漫游 Configuration 对象,请将 userLevel 设置为 PerUserRoaming。
注意:若要获取资源的 Configuration 对象,您的代码必须对它从中继承设置的所有配置文件具有“读取”特权。若要更新配置文件,您的代码还必须对该配置文件及其所在目录具有“写入”特权。
示例程序:
1、配置文件结构如下:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <appSettings> 4 <add key="ApServer1" value="ApServer1"/> 5 <add key="ApServer2" value="ApServer2"/> 6 <add key="LocalHost1" value="LocalHost1"/> 7 <add key="LocalHost2" value="LocalHost2"/> 8 <add key="addr" value="11111"/> 9 </appSettings> 10 <startup> 11 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 12 </startup> 13 </configuration>
2、通过程序修改LocalHost1节点的值
string strLocalHost1Value1 = ConfigurationManager.AppSettings["LocalHost1"].ToString(); //strLocalHost1Value1="LocalHost1"; //Configuration对象 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["LocalHost1"].Value = "http://127.0.0.1";//保存配置文件 config.AppSettings.SectionInformation.ForceSave = true; config.Save(ConfigurationSaveMode.Modified); //重新加载改变的节点 ConfigurationManager.RefreshSection("appSettings");//读取配置文件的值 string strLocalHost1Value2 = ConfigurationManager.AppSettings["LocalHost1"].ToString();//strLocalHost1Value2="http://127.0.0.1"
二、使用OpenExeConfiguration(String)重载设置指定的客户端配置文件
重载指定的客户端config文件主要包括下面3种情况:
1、加载非当前应用程序yyy.exe默认的config文件的xxx.exe.config文件(yyy.exe是当前应用程序,xxx.exe.config与yyy.exe.config文件不在同一目录下)。
2、加载非应用程序的xxx.config文件。
3、让类库xxx.dll内的函数读取默认config文件的时候,读取的是xxx.dll同级目录下的xxx.dll.config文件,而不是加载xxx.dll的应用程序yyy.exe的默认应用程序配置文件:yyy.exe.config。
注意:在类库中使用ConfigruationManager读取的不是自动编译生成的xxx.dll.config文件,而是引用类库的应用程序yyy.exe的yyy.exe.config文件。
解决方法:
按照MSDN上的说明,我们把要打开的xxx.exe.config的路径作为参数传入,代码如下:
1 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe.config"); 2 con.AppSettings.Settings["LocalHost2"].Value = "测试";
但是程序运行的时候报错,经过调试,发现con对象的FilePath属性的值为:C:\Modify.exe.config.config,程序自己在传入的参数后增加了“.config”作为要打开的config文件的路径,因为没有这个文件,所以程序报错。这里要传入的参数,不应该是要打开的config文件的路径,而是这个config文件对应的应用程序的路径,上面的代码应修改为:
1 //参数传的是应用程序的路径 2 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe."); 3 con.AppSettings.Settings["LocalHost2"].Value = "测试";
再次运行程序,还是报错,提示“加载配置文件时出错:参数exePath”无效。这里要传入应用程序的路径(exePath)没错,但是因为在xxx.exe.config文件的同一目录下,没有xxx.exe文件,因此我们传入的exePath实际上是无效的,为了能够加载xxx.exe.config文件,需要在同一目录下增加一个xxx.exe文件。(可以在同一目录下新建一个txt文件,修改名称为xxx,扩展名为.exe,这样就可以加载xxx.exe.config配置文件了)
完整的代码如下:
//参数传的是应用程序的路径 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe"); con.AppSettings.Settings["LocalHost2"].Value = "测试"; //保存配置文件 con.AppSettings.SectionInformation.ForceSave = true; con.Save(ConfigurationSaveMode.Modified); //重新加载改变的节点 ConfigurationManager.RefreshSection("appSettings");//读取修改后的配置文件节点值 string str = con.AppSettings.Settings["LocalHost2"].Value;//str="测试"
注意:
使用ConfigurationManager.OpenExeConfiguration(string exePath)即可,同时注意2个小细节:
A:改方法需传入的是exePath,而不是configPath;
B:exePath必须是有效的,因此xxx.exe和xxx.exe.config应该成对出现,缺一不可。
加载非应用程序的xxx.config文件
在上面的例子中,观察xxx.exe.config文件的名称,发现,若把xxx.exe看成YYY,则xxx.exe.config=YYY.config,也就是说:xxx.exe.config是xxx.config文件的一种特殊形式,所以,可以使用如下的代码加载xx.config文件:
//参数传的是应用程序的路径 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify"); con.AppSettings.Settings["LocalHost2"].Value = "测试"; //保存配置文件 con.AppSettings.SectionInformation.ForceSave = true; con.Save(ConfigurationSaveMode.Modified); //重新加载改变的节点 ConfigurationManager.RefreshSection("appSettings");//读取修改后的配置文件节点值 string str = con.AppSettings.Settings["LocalHost2"].Value;//str="测试"
注意:C:\Modify这个文件必须要有。
加载xxx.dll.config文件:
还是从文件名上来找思路,我们要加载xxx.dll.config文件,可以和加载xxx.config文件一样。在dll内,碰到需要读取config文件信息的时候,放弃使用ConfigurationManager读取节点的值,而是使用OpenExeConfiguration(string exePath)方法加载config文件为一个Configuration对象来使用。
注意:通过程序修改配置文件中节点的值,不会修改.config文件里面的值,更改只是发生在内存中。
Config文件的使用:通过程序修改Config文件相关推荐
- DCMTK:命令行应用程序修改DICOM文件中的标签
DCMTK:命令行应用程序修改DICOM文件中的标签 命令行应用程序修改DICOM文件中的标签 命令行应用程序修改DICOM文件中的标签 #include "dcmtk/config/osc ...
- VS2005控制台程序修改nb0文件
VS2005控制台程序修改nb0文件 我们要实现的功能就是通过CMD传递进来的值来在nb0文件末尾增加版本信息,新建控制台程序,自动生成的main函数如下,默认的代码非常简单: int _tmain( ...
- linux怎样自动检查link文件_自动共享和上传文件到兼容的托管站点 | Linux 中国
Anypaste 将会根据你想上传的文件的类型来自动挑选合适的托管站点.简单地说,照片将被上传到图像托管站点,视频被传到视频站点,代码被传到 pastebin. -- Sk(作者) 前阵子我们写了一个 ...
- php上传照片到s3云服务器,PHP上传文件到AWS S3生成下载文件URL
* 加载s3客户端 * @return string*/ functionAWS_S3Client(){$ACCESS_KEY_ID = '你的s3 ID';$SECRET_ACCESS_KEY = ...
- .NET技术 ASP.NET中常用的文件上传下载方法(多文件上传)
文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以 ...
- 00截断上传绕过_【文件上传与解析】文件上传与解析漏洞总结v1.0
点击上方"公众号" 可以订阅哦! Hello,各位小伙伴晚上好~ 这里是依旧勤劳写公众号的小编~ 今天本公众号将推出一个新的模块,那就是漏洞知识点总结模块!!!(此处应有掌声~) ...
- git文件生命周期以及如何管理文件
git configuration git config --local # (currentGitDir)/.git/config git config --global # ~/.gitconfi ...
- linux打开文件命令occ,Linux系统查看文件内容的命令有哪些?
Linux文件内容查阅,可以使用命令来实现.cat, tac, more,包括nl等命令都可以用来查阅文件内容,本文就通过举例的方式来介绍一下,Linux系统查看文件内容的命令有哪些. /messag ...
- 【Android 逆向】Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )
文章目录 一.文件所有者与分组 二./sdcard/ 的文件分组 三./data/ 目录分析 四.用户类型 一.文件所有者与分组 使用 ls -l 命令 , 查看 Android 系统根目录 , 下图 ...
最新文章
- R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(手动编码添加均值、标准偏差)实战(dot plot)
- HDLBits 系列(16)Something about Counter
- linux libssh2 实例
- Spring IoC 源码导读
- HTTP调试工具:Fiddler 介绍二
- this.counter$ = store.select(fromExample.getCounterCounter);
- 12c oracle 修改内存_关于Oracle数据库12c 新特性总结
- 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
- Leetcode--442. 数组中重复的数据
- JVM从入门到放弃——JVM内存模型
- macd指标计算机应用,macd是怎么计算的
- 人体神经元细胞分布图片,神经元人体分布大图
- 互联网是如何工作的?
- 【LeetCode】18. 4Sum 四数之和
- Mac SOME/IP编译以及Ubuntu的SOME/IP集成与编译
- nginx反向代理到第三方服务商的服务器
- 建立基于IP地址访问的网站
- 网易云歌单歌曲实时拉取
- 南大通用数据库-Gbase-8a-学习-14-LOAD加载数据
- 嵌入式工程师的日常是啥样的?就业现状如何?
热门文章
- 剑指offer面试题[5]-从尾到头打印链表
- 一文带你用python做自动化测试
- redhat linux 7 安装,Redhat Linux 7.3 快速安装指引 *
- es中的xpack插件下载_ppt中插入flash动画工具-PowerPoint中插入Flash插件下载电脑版...
- oracle登录页面错误,php和oracle的页面登录问题
- java 各组件单击总数_java 获取面板上有多少个组件
- 2021青海省普通高考成绩查询,青海省教育考试网:2021年青海高考成绩查询入口、查分系统...
- 介绍一种在Xcode中删除一整行代码的快捷键设置,
- shiro 同时实现url和按钮的拦截_Shiro是如何拦截未登录请求的(一)
- _2020年10个最好的Linux发行版本