最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過C#程序操作Config文件

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

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

MSDN上面對該方法的解釋:ConfigurationManager.OpenExeConfiguration方法用來把指定的客戶端配置文件作為Configuration對象打開,該方法具有兩個重載:

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

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

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

通過向 userLevel 傳遞下列值之一來指定要獲取的配置:

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

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

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

注意:若要獲取資源的 Configuration 對象,您的代碼必須對它從中繼承設(shè)置的所有配置文件具有“讀取”特權(quán)。若要更新配置文件,您的代碼還必須對該配置文件及其所在目錄具有“寫入”特權(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、通過程序修改LocalHost1節(jié)點的值

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);
//重新加載改變的節(jié)點
ConfigurationManager.RefreshSection("appSettings");

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

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

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

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

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

解決方法:

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

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

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

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

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

完整的代碼如下:

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

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

注意:

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

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

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

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

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

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

注意:C:\Modify這個文件必須要有。

加載xxx.dll.config文件:

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

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

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

相關(guān)文章

  • c# RPC框架的使用簡介

    c# RPC框架的使用簡介

    這篇文章主要介紹了c# RPC框架的使用簡介,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#中Socket與Unity相結(jié)合示例代碼

    C#中Socket與Unity相結(jié)合示例代碼

    這篇文章主要給大家介紹了關(guān)于C#中Socket與Unity相結(jié)合的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • C#通過反射打開相應(yīng)窗體方法分享

    C#通過反射打開相應(yīng)窗體方法分享

    本文章來給各位同學(xué)介紹關(guān)于C#單擊菜單欄或工具欄時通過反射打開窗體的方法,有需要了解的朋友可進入?yún)⒖紖⒖肌?/div> 2015-05-05
  • C#控制臺程序的開發(fā)與打包為一個exe文件實例詳解

    C#控制臺程序的開發(fā)與打包為一個exe文件實例詳解

    所謂控制臺程序,就是沒有界面,運行程序后只有一個黑色的類似cmd窗口,通過這個窗口進行交互,下面這篇文章主要給大家介紹了關(guān)于C#控制臺程序的開發(fā)與打包為一個exe文件的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法

    C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法

    這篇文章主要介紹了C#寫入對象或集合類型數(shù)據(jù)到xml文件的方法,涉及C#針對XML文件的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • SQLite在C#中的安裝與操作技巧

    SQLite在C#中的安裝與操作技巧

    SQLite,是一款輕型的數(shù)據(jù)庫,用于本地的數(shù)據(jù)儲存。其優(yōu)點有很多,下面通過本文給大家介紹SQLite在C#中的安裝與操作技巧,感興趣的的朋友參考下吧
    2017-08-08
  • C#通過HttpWebRequest發(fā)送帶有JSON Body的POST請求實現(xiàn)

    C#通過HttpWebRequest發(fā)送帶有JSON Body的POST請求實現(xiàn)

    本文主要介紹了C#通過HttpWebRequest發(fā)送帶有JSON Body的POST請求實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中迭代器和分部類的使用

    C#中迭代器和分部類的使用

    迭代器和分部類是C#語言的兩種重要特性,本文主要介紹了C#中迭代器和分部類的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 淺談Visual Studio 2019 Vue項目的目錄結(jié)構(gòu)

    淺談Visual Studio 2019 Vue項目的目錄結(jié)構(gòu)

    這篇文章主要介紹了Visual Studio 2019 Vue項目 目錄結(jié)構(gòu),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • c#中token的使用方法實例

    c#中token的使用方法實例

    本文主要介紹了c#中token的使用方法實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

西华县| 平遥县| 巴塘县| 将乐县| 新宾| 双城市| 忻城县| 迁西县| 都江堰市| 穆棱市| 东乡县| 施甸县| 景宁| 留坝县| 克什克腾旗| 九龙城区| 安龙县| 淮安市| 邵阳县| 达州市| 威宁| 额尔古纳市| 双柏县| 永宁县| 凌海市| 肇州县| 阜南县| 余江县| 诏安县| 汤原县| 尉犁县| 漯河市| 茂名市| 龙南县| 广平县| 洛隆县| 山东省| 南开区| 客服| 大渡口区| 东源县|