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 = "127.0.0.1";
//保存配置⽂件
config.AppSettings.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
//重新加载改变的节点
ConfigurationManager.RefreshSection("appSettings");
//读取配置⽂件的值
string strLocalHost1Value2 = ConfigurationManager.AppSettings["LocalHost1"].ToString();//strLocalHost1Value2="127.0.0.1"
⼆、使⽤OpenExeConfiguration(String)重载设置指定的客户端配置⽂件
重载指定的客户端config⽂件主要包括下⾯3种情况:
1、加载⾮当前应⽤程序默认的config⽂件的fig⽂件(是当前应⽤程序,fig与
2、加载⾮应⽤程序的fig⽂件。
3、让类库xxx.dll内的函数读取默认config⽂件的时候,读取的是xxx.dll同级⽬录下的fig⽂件,⽽不是加载xxx.dll的应⽤程序的默认应⽤程序配置⽂件:fig。
注意:在类库中使⽤ConfigruationManager读取的不是⾃动编译⽣成的fig⽂件,⽽是引⽤类库的应⽤程序 的fig⽂件。
AAbc的词语有哪些解决⽅法:
按照MSDN上的说明,我们把要打开的fig的路径作为参数传⼊,代码如下:
1 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\fig");
2 con.AppSettings.Settings["LocalHost2"].Value = "测试";
但是程序运⾏的时候报错,经过调试,发现con对象的FilePath属性的值为:C:\fig,程序⾃⼰在传⼊的参数后增加
了“.config”作为要打开的config⽂件的路径,因为没有这个⽂件,所以程序报错。这⾥要传⼊的参数,不应该是要打开的config⽂件的路径,⽽是这个config⽂件对应的应⽤程序的路径,上⾯的代码应修改为:
1//参数传的是应⽤程序的路径
2 Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\");
3 con.AppSettings.Settings["LocalHost2"].Value = "测试";
再次运⾏程序,还是报错,提⽰“加载配置⽂件时出错:参数exePath”⽆效。这⾥要传⼊应⽤程序的路径(exePath)没错,但是因为在fig⽂件的同⼀⽬录下,没有⽂件,因此我们传⼊的exePath实际上是⽆效的,为了能够加载fig⽂件,需要在同⼀⽬录下增加⼀个⽂件。(可以在同⼀⽬录下新建⼀个txt⽂件,修改名称为xxx,扩展名为.exe,这样就可以加载fig配置⽂件了)
完整的代码如下:
//参数传的是应⽤程序的路径
Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\");
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必须是有效的,因此和fig应该成对出现,缺⼀不可。
加载⾮应⽤程序的fig⽂件
在上⾯的例⼦中,观察fig⽂件的名称,发现,若把看成YYY,则fig,也就是说:fig 是fig⽂件的⼀种特殊形式,所以,可以使⽤如下的代码加载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这个⽂件必须要有。
加载fig⽂件:
还是从⽂件名上来思路,我们要加载fig⽂件,可以和加载fig⽂件⼀样。在dll内,碰到需要读取config⽂件信息的时候,放弃使⽤ConfigurationManager读取节点的值,⽽是使⽤OpenExeConfiguration(string exePath)⽅法加载config⽂件为⼀个Configuration对象来使⽤。
注意:通过程序修改配置⽂件中节点的值,不会修改.config⽂件⾥⾯的值,更改只是发⽣在内存中。
发布评论