c#中各種配置文件的操作

CSDN博客

img z702143700

C#各種配置文件使用侯嘀,操作方法總結(jié)

發(fā)表于2015/5/22 10:12:54 ?748人閱讀

分類: .Net

配置文件操作

? ?配置文件一般分為內(nèi)置配置文和用戶自定義配置文件。

? ?內(nèi)置配置文件包括app.config、web.config、Settings.settings等等褐奴。

用戶自定義配置文件一般是將配置信息放到XML文件或注冊表中闰蚕,配置信息一般包括程序設(shè)置析桥,記錄運(yùn)行信息两踏,保存控件的信息(比如位置败京,樣式)。

一梦染、內(nèi)置配置文件操作

app.config和web.config操作類似赡麦,以app.config為例,Settings.settings能夠指定值的類型和范圍帕识。

1.a(chǎn)pp.config文件操作

該配置文件中主要的節(jié)點(diǎn)有:connectionStrings隧甚、appSettings、configSections等渡冻,這幾個(gè)屬于常用戚扳,操作都略有不同,DotNet提供直接操作各個(gè)節(jié)點(diǎn)的方法族吻。在用到ConfigurationManager時(shí)要添加system.configuration.dll程序集的引用帽借。

程序移植后配置文件的修改會(huì)保存在.exe.config的文件中,但是根據(jù)我經(jīng)驗(yàn)如果你不修改配置文件超歌,一般exe不自動(dòng)創(chuàng)建一個(gè).exe.config的文件砍艾。

在項(xiàng)目進(jìn)行編譯后,在bin\Debuge文件下巍举,將出現(xiàn)兩個(gè)配置文件脆荷,一個(gè)名為“*.EXE.config”,另一個(gè)名為“*.vshost.exe.config”懊悯。第一個(gè)文件為項(xiàng)目實(shí)際使用的配置文件蜓谋,在程序運(yùn)行中所做的更改都將被保存于此;第二個(gè)文件為原代碼“app.config”的同步文件炭分,在程序運(yùn)行中不會(huì)發(fā)生更改桃焕。

l ?connectionStrings:由于保存數(shù)據(jù)連接字符串。

讀:

ConfigurationManager.ConnectionStrings["AccessDB"].ConnectionString;

寫:

//設(shè)置連接字符串

ConnectionStringSettings setConnStr = newConnectionStringSettings("AccessDB", connectionString,"System.Data.OleDb");

//打開當(dāng)前應(yīng)用程序的app.config文件捧毛,進(jìn)行操作

Configuration appConfig =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

//由于沒有更新連接字符串的方法观堂,所以這里直接再添加一個(gè)連接字符串

appConfig.ConnectionStrings.ConnectionStrings.Add(setConnStr);

appConfig.Save();

// 強(qiáng)制重新載入配置文件的ConnectionStrings配置節(jié)

ConfigurationManager.RefreshSection("connectionStrings");

l ?appSettings:主要存儲程序設(shè)置,以鍵值對的形式出現(xiàn)呀忧。

讀:

String str = ConfigurationManager.AppSettings["DemoKey"];

寫:

Configuration cfg=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

cfg.AppSettings.Settings["DemoKey"].Value= "DemoValue";

cfg.Save();

l ?configSections:自定義配置節(jié)

name:自定義配置節(jié)的名稱师痕。

type:自定義配置節(jié)的類型,主要包括:

System.Configuration.SingleTagSectionHandler

System.Configuration.DictionarySectionHandler

System.Configuration.NameValueSectionHandler而账。

不同的type不但設(shè)置配置節(jié)的方式不一樣胰坟,最后訪問配置文件的操作上也有差異。

三個(gè)不同的type操作:

說明:在聲明部分使用聲明了一個(gè)配置節(jié)它的名字叫Test1福扬,類型為SingleTagSectionHandler腕铸。在設(shè)置配置節(jié)部分使用 設(shè)置了一個(gè)配置節(jié),它的第一個(gè)設(shè)置的值是Hello铛碑,第二個(gè)值是World狠裹,當(dāng)然還可以有更多。其它的兩個(gè)配置節(jié)和這個(gè)類似汽烦。

下面我們看在程序中如何訪問這些自定義的配置節(jié)涛菠。我們用過ConfigurationSettings類的靜態(tài)方法GetConfig來獲取自定義配置節(jié)的信息。

//訪問配置節(jié)Test1

IDictionary IDTest1 =(IDictionary)ConfigurationSettings.GetConfig("Test1");

string str = (string)IDTest1["setting1"]+" "+(string)IDTest1["setting2"];

MessageBox.Show(str); ? ? ? ?//輸出Hello World

//訪問配置節(jié)Test1的方法2

string[] values1=new string[IDTest1.Count];

IDTest1.Values.CopyTo(values1,0);

MessageBox.Show(values1[0]+""+values1[1]); ? ? //輸出HelloWorld

//訪問配置節(jié)Test2

IDictionary IDTest2 =(IDictionary)ConfigurationSettings.GetConfig("Test2");

string[] keys=new string[IDTest2.Keys.Count];

string[] values=new string[IDTest2.Keys.Count];

IDTest2.Keys.CopyTo(keys,0);

IDTest2.Values.CopyTo(values,0);

MessageBox.Show(keys[0]+" "+values[0]);

//訪問配置節(jié)Test3

NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3");

MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]); //輸出HelloWorld

配置節(jié)處理程序

返回類型

SingleTagSectionHandler

Systems.Collections.IDictionary

DictionarySectionHandler

Systems.Collections.IDictionary

NameValueSectionHandler

Systems.Collections.Specialized.NameValueCollection

l ?sectionGroup:自定義配置節(jié)組

配置節(jié)組是使用元素撇吞,將類似的配置節(jié)分到同一個(gè)組中俗冻。配置節(jié)組聲明部分將創(chuàng)建配置節(jié)的

包含元素,在元素中聲明配置節(jié)組牍颈,并將屬于該組的節(jié)置于元素中迄薄。下面

是一個(gè)包含配置節(jié)組的配置文件的例子:

? ?

? ? ? ?

? ? ? ? ? ?

? ?

? ? ? ?

? ? ? ? ? ?

下面是訪問這個(gè)配置節(jié)組的代碼:

NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test");

MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]); ? ?//輸出HelloWorld

2.Settings.settings配置文件操作

這個(gè)用的不多,操作也很簡單煮岁,在此不詳細(xì)敘述讥蔽。

二、用戶自定義文件操作

1.XML配置文件操作

XML配置文件一般由我們自己定義格式画机,由于某些地方對于app.config不提供寫的功能冶伞,我們就需要自己來操作這個(gè)XML,這里我們就拿它作為例子步氏,來說明XML的操作响禽。

privatevoid SaveConfig(string ConnenctionString)

{

XmlDocument doc=new XmlDocument();

//獲得配置文件的全路徑

stringstrFileName=AppDomain.CurrentDomain.BaseDirectory.ToString()+"Code.exe.config";

doc.LOAd(strFileName);

//找出名稱為“add”的所有元素

XmlNodeList nodes=doc.GetElementsByTagName("add");

for(int i=0;i

{

//獲得將當(dāng)前元素的key屬性

XmlAttributeatt=nodes[i].Attributes["key"];

//根據(jù)元素的第一個(gè)屬性來判斷當(dāng)前的元素是不是目標(biāo)元素

if (att.Value=="ConnectionString")

{

//對目標(biāo)元素中的第二個(gè)屬性賦值

att=nodes[i].Attributes["value"];

att.Value=ConnenctionString;

break;

}

}

//保存上面的修改

doc.Save(strFileName);

}

2.注冊表配置操作

首先注冊表也是以鍵值對的形式存儲的,DotNet提供對注冊表的操作荚醒。

操作實(shí)例:

? ? ? ? ///

/// 從注冊表中加載窗體位置大小等信息

///

public static voidLoadFormPosition(System.Windows.Forms.Form Fo)

{

Microsoft.Win32.RegistryKey rk =Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\\\MapWinGISConfig",false);

try

{

if ((rk.GetValue(Fo.Name +"_x").ToString() != "") && (rk.GetValue(Fo.Name +"_y").ToString()!= "") && (rk.GetValue(Fo.Name + "_w").ToString()!= "") && (rk.GetValue(Fo.Name+ "_h").ToString() != ""))

{

Fo.Location = newSystem.Drawing.Point(int.Parse(rk.GetValue(Fo.Name +"_x").ToString(),CultureInfo.InvariantCulture), int.Parse(rk.GetValue(Fo.Name +"_y").ToString(),CultureInfo.InvariantCulture));

? ? ? ? ? ? ? ? ? ?Fo.Size = newSystem.Drawing.Size(int.Parse(rk.GetValue(Fo.Name +"_w").ToString(),CultureInfo.InvariantCulture), int.Parse(rk.GetValue(Fo.Name +"_h").ToString(),CultureInfo.InvariantCulture));

? ? ? ? ? ? ? ?}

? ? ? ? ? ?}

? ? ? ? ? ?catch

? ? ? ? ? ?{

? ? ? ? ? ?}

? ? ? ? ? ?finally

? ? ? ? ? ?{

? ? ? ? ? ? ? ?rk.Close();

? ? ? ? ? ?}

? ? ? ?}

? ? ? ?///

/// 將窗體位置大小信息保存在注冊表中

///

public static voidSaveFormPosition(System.Windows.Forms.Form Fo)

{

Microsoft.Win32.RegistryKey rk =Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\\\MapWinGISConfig");

? ? ? ? ? ?if (Fo.Visible &&Fo.WindowState != System.Windows.Forms.FormWindowState.Minimized&&Fo.Location.X > -1 && Fo.Location.Y > -1 && Fo.Size.Width> 1 && Fo.Size.Height > 1)

? ? ? ? ? ?{

? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_x", Fo.Location.X);

? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_y", Fo.Location.Y);

? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_w", Fo.Size.Width);

? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_h", Fo.Size.Height);

? ? ? ? ? ?}

? ? ? ? ? ?rk.Close();

? ? ? ?}

三芋类、應(yīng)用程序信息配置

通過代碼繼承ApplicationSettingsBase類(C/S模式),在代碼中設(shè)置相關(guān)的屬性界阁。

? 1.繼承該類一般有類屬性[SettingsProvider("System.Configuration.LocalFileSettingsProvider")]-詳情如下

? 2.每個(gè)屬性必須設(shè)置是[ApplicationScopedSetting()]還是[UserSocpedSetting()]梗肝,還可以設(shè)置默認(rèn)值[DefaultSettingValueAttribute("100,100")]

? 3.屬性設(shè)置完成后,在方法級別或方法內(nèi)部(視情況而定)實(shí)例化該繼承的類铺董,在窗體加載時(shí)設(shè)置相應(yīng)屬性巫击。加載程序配置方法有兩種-詳情如下。

? 4.如果需要可以利用事件監(jiān)視設(shè)置的屬性改變精续、保存坝锰、加載時(shí)進(jìn)行哪些操作

? 5.在窗體注銷時(shí)保存設(shè)置。

詳解:

(一)重付,LocalFileSettingsProvider---為應(yīng)用程序設(shè)置類提供持久性存儲顷级。

? ? 1.該類提供一種機(jī)制--程序使用配置數(shù)據(jù)的機(jī)制,其將程序的設(shè)置文件保存到默認(rèn)的位置确垫。

? ? 2.客戶端并不顯示訪問這個(gè)類弓颈,而是在需要服務(wù)時(shí)由設(shè)置機(jī)制自動(dòng)調(diào)用帽芽,如:ApplicationSettingsBase中的很多成員都使用該類。

? ? 3.該類將配置文件保存為.config的XML文件

? ? ? ? 1.若字段的屬性設(shè)置為[UserScopedSetting()]翔冀,則保存為user.config文件导街,

? ? ? ? ? 保存位置C:\Documentsand Settings\[計(jì)算機(jī)用戶名]\LocalSettings\Application Data\[AssemblyCompany("huzongzhe")程序集中的一個(gè)屬性]\

? ? ? ? 2.若字段的屬性設(shè)置為[ApplicationScopedSetting()],則保存為[程序名].exe.config文件,

? ? ? ? ? 保存位置:與可執(zhí)行文件相同的目錄中纤子。

? ?4.ToolStripManager.LoadSettings(this)和ToolStripManager.SaveSettings(this)方法解釋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搬瑰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子控硼,更是在濱河造成了極大的恐慌泽论,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卡乾,死亡現(xiàn)場離奇詭異翼悴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幔妨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門抄瓦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陶冷,你說我怎么就攤上這事钙姊。” “怎么了埂伦?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵煞额,是天一觀的道長。 經(jīng)常有香客問我沾谜,道長膊毁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任基跑,我火速辦了婚禮婚温,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘媳否。我一直安慰自己栅螟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布篱竭。 她就那樣靜靜地躺著力图,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掺逼。 梳的紋絲不亂的頭發(fā)上吃媒,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼赘那。 笑死刑桑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的募舟。 我是一名探鬼主播祠斧,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胃珍!你這毒婦竟也來了梁肿?” 一聲冷哼從身側(cè)響起蜓陌,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤觅彰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钮热,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體填抬,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年隧期,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了飒责。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仆潮,死狀恐怖宏蛉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情性置,我是刑警寧澤拾并,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鹏浅,受9級特大地震影響嗅义,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隐砸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一之碗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧季希,春花似錦褪那、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至珊搀,卻和暖如春冶忱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工囚枪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留派诬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓链沼,卻偏偏與公主長得像默赂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子括勺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缆八,服務(wù)發(fā)現(xiàn),斷路器疾捍,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程奈辰,因...
    小菜c閱讀 6,424評論 0 17
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法乱豆,內(nèi)部類的語法奖恰,繼承相關(guān)的語法,異常的語法宛裕,線程的語...
    子非魚_t_閱讀 31,634評論 18 399
  • (http://www.cnblogs.com/zhangchenliang/p/4546352.html) 1瑟啃、...
    凌雲(yún)木閱讀 2,426評論 0 2
  • 【業(yè)務(wù)技能】 114種常見新聞導(dǎo)語寫法(媒體人必備) 2如何一眼識破假新聞?赫芬頓郵報(bào)記者教你9招 【別人家的報(bào)道...
    周小毛JudyChou閱讀 255評論 0 0