欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過(guò)C#程序操作Config文件

 更新時(shí)間:2022年02月26日 09:43:27   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
這篇文章介紹了通過(guò)C#程序操作Config文件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

對(duì)于config文件,一般情況下都是使用ConfigurationManager加載,然后通過(guò)讀取相應(yīng)節(jié)點(diǎn)的值來(lái)獲取想要的數(shù)據(jù),但是,有時(shí)候需要修改config文件的值,這時(shí)候就用到了OpenExeConfiguration()方法。

MSDN上面對(duì)該方法的解釋?zhuān)篊onfigurationManager.OpenExeConfiguration方法用來(lái)把指定的客戶(hù)端配置文件作為Configuration對(duì)象打開(kāi),該方法具有兩個(gè)重載:

名稱(chēng)說(shuō)明
ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel)將當(dāng)前應(yīng)用程序的配置文件作為 Configuration 對(duì)象打開(kāi)。
ConfigurationManager.OpenExeConfiguration (String)將指定的客戶(hù)端配置文件作為 Configuration 對(duì)象打開(kāi)。

一、使用OpenExeConfiguration(ConfigurationUserLevel)重載設(shè)置當(dāng)前應(yīng)用程序的配置文件

客戶(hù)端應(yīng)用程序使用應(yīng)用于所有用戶(hù)的全局配置、應(yīng)用于單個(gè)用戶(hù)的單獨(dú)配置以及應(yīng)用于漫游用戶(hù)的配置。userLevel 參數(shù)通過(guò)指示該配置文件是不具有用戶(hù)級(jí)別(配置文件與應(yīng)用程序位于同一目錄中),還是具有一個(gè)依每個(gè)用戶(hù)而定的用戶(hù)級(jí)別(配置文件位于用戶(hù)級(jí)別所確定的應(yīng)用程序設(shè)置路徑中),從而確定所打開(kāi)的配置文件的位置。

通過(guò)向 userLevel 傳遞下列值之一來(lái)指定要獲取的配置:

  • 若要獲取應(yīng)用于所有用戶(hù)的 Configuration 對(duì)象,請(qǐng)將 userLevel 設(shè)置為 None。

  • 若要獲取應(yīng)用于當(dāng)前用戶(hù)的本地 Configuration 對(duì)象,請(qǐng)將 userLevel 設(shè)置為 PerUserRoamingAndLocal。

  • 若要獲取應(yīng)用于當(dāng)前用戶(hù)的漫游 Configuration 對(duì)象,請(qǐng)將 userLevel 設(shè)置為 PerUserRoaming。

注意:若要獲取資源的 Configuration 對(duì)象,您的代碼必須對(duì)它從中繼承設(shè)置的所有配置文件具有“讀取”特權(quán)。若要更新配置文件,您的代碼還必須對(duì)該配置文件及其所在目錄具有“寫(xiě)入”特權(quán)。

示例程序:

1、配置文件結(jié)構(gòu)如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="ApServer1" value="ApServer1"/>
    <add key="ApServer2" value="ApServer2"/>
    <add key="LocalHost1" value="LocalHost1"/>
    <add key="LocalHost2" value="LocalHost2"/>
    <add key="addr" value="11111"/>
  </appSettings>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

2、通過(guò)程序修改LocalHost1節(jié)點(diǎn)的值

string strLocalHost1Value1 = ConfigurationManager.AppSettings["LocalHost1"].ToString(); //strLocalHost1Value1="LocalHost1";
//Configuration對(duì)象
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);
//重新加載改變的節(jié)點(diǎn)
ConfigurationManager.RefreshSection("appSettings");

//讀取配置文件的值
string strLocalHost1Value2 = ConfigurationManager.AppSettings["LocalHost1"].ToString();//strLocalHost1Value2="http://127.0.0.1"

二、使用OpenExeConfiguration(String)重載設(shè)置指定的客戶(hù)端配置文件

重載指定的客戶(hù)端config文件主要包括下面3種情況:

  • 1、加載非當(dāng)前應(yīng)用程序yyy.exe默認(rèn)的config文件的xxx.exe.config文件(yyy.exe是當(dāng)前應(yīng)用程序,xxx.exe.config與yyy.exe.config文件不在同一目錄下)。
  • 2、加載非應(yīng)用程序的xxx.config文件。
  • 3、讓類(lèi)庫(kù)xxx.dll內(nèi)的函數(shù)讀取默認(rèn)config文件的時(shí)候,讀取的是xxx.dll同級(jí)目錄下的xxx.dll.config文件,而不是加載xxx.dll的應(yīng)用程序yyy.exe的默認(rèn)應(yīng)用程序配置文件:yyy.exe.config。

注意:在類(lèi)庫(kù)中使用ConfigruationManager讀取的不是自動(dòng)編譯生成的xxx.dll.config文件,而是引用類(lèi)庫(kù)的應(yīng)用程序yyy.exe的yyy.exe.config文件。

解決方法:

按照MSDN上的說(shuō)明,我們把要打開(kāi)的xxx.exe.config的路徑作為參數(shù)傳入,代碼如下:

Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe.config");
con.AppSettings.Settings["LocalHost2"].Value = "測(cè)試";

但是程序運(yùn)行的時(shí)候報(bào)錯(cuò),經(jīng)過(guò)調(diào)試,發(fā)現(xiàn)con對(duì)象的FilePath屬性的值為:C:\Modify.exe.config.config,程序自己在傳入的參數(shù)后增加了“.config”作為要打開(kāi)的config文件的路徑,因?yàn)闆](méi)有這個(gè)文件,所以程序報(bào)錯(cuò)。這里要傳入的參數(shù),不應(yīng)該是要打開(kāi)的config文件的路徑,而是這個(gè)config文件對(duì)應(yīng)的應(yīng)用程序的路徑,上面的代碼應(yīng)修改為:

//參數(shù)傳的是應(yīng)用程序的路徑
Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe.");
con.AppSettings.Settings["LocalHost2"].Value = "測(cè)試";

再次運(yùn)行程序,還是報(bào)錯(cuò),提示“加載配置文件時(shí)出錯(cuò):參數(shù)exePath”無(wú)效。這里要傳入應(yīng)用程序的路徑(exePath)沒(méi)錯(cuò),但是因?yàn)樵趚xx.exe.config文件的同一目錄下,沒(méi)有xxx.exe文件,因此我們傳入的exePath實(shí)際上是無(wú)效的,為了能夠加載xxx.exe.config文件,需要在同一目錄下增加一個(gè)xxx.exe文件。(可以在同一目錄下新建一個(gè)txt文件,修改名稱(chēng)為xxx,擴(kuò)展名為.exe,這樣就可以加載xxx.exe.config配置文件了)

完整的代碼如下:

//參數(shù)傳的是應(yīng)用程序的路徑
Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe");
con.AppSettings.Settings["LocalHost2"].Value = "測(cè)試";
//保存配置文件
con.AppSettings.SectionInformation.ForceSave = true;
con.Save(ConfigurationSaveMode.Modified);
//重新加載改變的節(jié)點(diǎn)
ConfigurationManager.RefreshSection("appSettings");

//讀取修改后的配置文件節(jié)點(diǎn)值
string str = con.AppSettings.Settings["LocalHost2"].Value;//str="測(cè)試"

注意:

使用ConfigurationManager.OpenExeConfiguration(string exePath)即可,同時(shí)注意2個(gè)小細(xì)節(jié):

  • A:改方法需傳入的是exePath,而不是configPath;
  • B:exePath必須是有效的,因此xxx.exe和xxx.exe.config應(yīng)該成對(duì)出現(xiàn),缺一不可。

加載非應(yīng)用程序的xxx.config文件

在上面的例子中,觀察xxx.exe.config文件的名稱(chēng),發(fā)現(xiàn),若把xxx.exe看成YYY,則xxx.exe.config=YYY.config,也就是說(shuō):xxx.exe.config是xxx.config文件的一種特殊形式,所以,可以使用如下的代碼加載xx.config文件:

//參數(shù)傳的是應(yīng)用程序的路徑
Configuration con = ConfigurationManager.OpenExeConfiguration("C:\\Modify");
con.AppSettings.Settings["LocalHost2"].Value = "測(cè)試";
//保存配置文件
con.AppSettings.SectionInformation.ForceSave = true;
con.Save(ConfigurationSaveMode.Modified);
//重新加載改變的節(jié)點(diǎn)
ConfigurationManager.RefreshSection("appSettings");

//讀取修改后的配置文件節(jié)點(diǎn)值
string str = con.AppSettings.Settings["LocalHost2"].Value;//str="測(cè)試"

注意:C:\Modify這個(gè)文件必須要有。

加載xxx.dll.config文件:

還是從文件名上來(lái)找思路,我們要加載xxx.dll.config文件,可以和加載xxx.config文件一樣。在dll內(nèi),碰到需要讀取config文件信息的時(shí)候,放棄使用ConfigurationManager讀取節(jié)點(diǎn)的值,而是使用OpenExeConfiguration(string exePath)方法加載config文件為一個(gè)Configuration對(duì)象來(lái)使用。

注意:通過(guò)程序修改配置文件中節(jié)點(diǎn)的值,不會(huì)修改.config文件里面的值,更改只是發(fā)生在內(nèi)存中。

到此這篇關(guān)于通過(guò)C#程序操作Config文件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)AutoResetEvent類(lèi)的阻塞模式方法解析

    python實(shí)現(xiàn)AutoResetEvent類(lèi)的阻塞模式方法解析

    AutoResetEvent :當(dāng)某個(gè)線(xiàn)程執(zhí)行到WaitOne()方法時(shí),該線(xiàn)程則會(huì)處于阻塞模式,當(dāng)被調(diào)用了Set()方法,阻塞的線(xiàn)程則會(huì)繼續(xù)向下執(zhí)行,其狀態(tài)立即被自動(dòng)設(shè)置為阻塞模式
    2012-11-11
  • C#檢查遠(yuǎn)程或本地磁盤(pán)使用率

    C#檢查遠(yuǎn)程或本地磁盤(pán)使用率

    要檢查磁盤(pán)的使用情況確定程序放哪個(gè)服務(wù)器和清理垃圾,所以寫(xiě)個(gè)小程序幫忙檢查。本文給大家介紹C#檢查遠(yuǎn)程或本地磁盤(pán)使用率的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • C#排序算法之堆排序

    C#排序算法之堆排序

    這篇文章主要為大家詳細(xì)介紹了C#排序算法之堆排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C#多線(xiàn)程的相關(guān)操作講解

    C#多線(xiàn)程的相關(guān)操作講解

    本文詳細(xì)講解了C#多線(xiàn)程的相關(guān)操作,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C#?泛型集合類(lèi)List<T>使用總結(jié)

    C#?泛型集合類(lèi)List<T>使用總結(jié)

    本文主要主要介紹了C#?泛型集合類(lèi)List<T>使用總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問(wèn)題,一是在服務(wù)端通過(guò)C#生成簽名和SDKID,二是在客戶(hù)端通過(guò)JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 深入了解c# 迭代器和列舉器

    深入了解c# 迭代器和列舉器

    這篇文章主要介紹了c# 迭代器和列舉器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)C#,感興趣的朋友可以了解下
    2020-08-08
  • 詳解C#中的Async和Await用法

    詳解C#中的Async和Await用法

    這篇文章主要介紹了C#中的Async和Await用法,包括在C#5.0下一些新特性的影響,需要的朋友可以參考下
    2015-07-07
  • WPF開(kāi)發(fā)技巧之花式控件功能擴(kuò)展詳解

    WPF開(kāi)發(fā)技巧之花式控件功能擴(kuò)展詳解

    這篇文章主要給大家介紹了關(guān)于WPF日常開(kāi)發(fā)之花式控件功能擴(kuò)展的相關(guān)資料,通過(guò)文中這個(gè)例子,我們可以對(duì)WPF的掌握會(huì)更深刻,需要的朋友可以參考下
    2021-07-07
  • C#實(shí)現(xiàn)Xml序列化與反序列化的方法

    C#實(shí)現(xiàn)Xml序列化與反序列化的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)Xml序列化與反序列化的方法,將序列化與反序列化的方法封裝入一個(gè)類(lèi)文件中,包含了較為詳盡的注釋說(shuō)明,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12

最新評(píng)論