版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C#中配置文件的操作注:從網(wǎng)上收集整理了關(guān)于C#中配置文件的資料,以下是自己的學(xué)習(xí)筆記,希望能給大家一點(diǎn)幫助,如有錯(cuò)漏,懇請(qǐng)指出。1 配置文件介紹程序配置文件實(shí)質(zhì)上是應(yīng)用程序的一種針對(duì)配置信息讀寫最簡(jiǎn)單的工具。它重要的功能就是將命令行選項(xiàng)和配置文件選項(xiàng)統(tǒng)一到一種數(shù)據(jù)結(jié)構(gòu)中,這樣的話可以在外部設(shè)置參數(shù),而無(wú)須修改代碼來(lái)達(dá)到我們想要的效果。配合上配置文件的讀寫接口,操作上也較為方便。過去常見的配置文件是以“.ini”為后綴的文本文件。INI,是英文“初始化(Initial)”的縮寫。正如該術(shù)語(yǔ)所表示的,INI文件被用來(lái)對(duì)操作系統(tǒng)或特定程序初始化或進(jìn)行參數(shù)設(shè)置。格式上主要分為“節(jié)”、“參數(shù)”和“注解
2、”三部分。后來(lái)由于Windows95推出了注冊(cè)表的概念,INI配置文件在系統(tǒng)中的地位就大不如前了。不過作為應(yīng)用程序的配置讀寫來(lái)說,INI還是有其牢固的地位的。后來(lái)XML的發(fā)展也為配置文件提供了一種更好的存儲(chǔ)格式。常見到的“config”文件擴(kuò)展名的文件,也是在C#編程中較為常用的。C#的配置文件在編碼階段,可通過添加新項(xiàng)找到(名為“應(yīng)用程序配置文件”),添加入項(xiàng)目后名為app.config,程序編譯后一般是以“程序名”+“.exe”+“.config”命名的文件出現(xiàn)。config文件的內(nèi)容與配置相關(guān)的分為兩大部分,一部分為應(yīng)用程序的配置節(jié)(appSettings),另一部分為連接字符串的配置節(jié)
3、(connectionStrings)??墒褂肅#提供的ConfigurationManager(原先使用ConfigureationSettings,現(xiàn)已棄用)進(jìn)行讀取。ConfigurationManager中比較重要的是AppSettings和ConnectionStrings兩個(gè)屬性,分別負(fù)責(zé)讀取應(yīng)用程序的配置項(xiàng)(appSettings)和連接字符串的配置項(xiàng)(connectionStrings)。如果要修改配置文件項(xiàng),需要先通過ConfigurationManager的OpenExeConfigureation()方法讀取信息到Configuration類中,再修改其中對(duì)應(yīng)項(xiàng)的信息,然
4、后執(zhí)行保存,最后如果要將結(jié)果調(diào)用出來(lái),還需要ConfigurationManager調(diào)用RefreshSection()方法進(jìn)行刷新。以上是對(duì)配置文件一些簡(jiǎn)單的介紹。下面我們來(lái)詳細(xì)看一下配置文件的各種功能和用法。2 INI配置文件2.1 格式INI配置文件以”ini”為文件擴(kuò)展名,內(nèi)容格式為:節(jié)、參數(shù)和注解。每一個(gè)INI文件構(gòu)成都非常類似,由若干段落(section)組成,在每個(gè)帶括號(hào)的標(biāo)題下面,是若干個(gè)以單個(gè)單詞開頭的關(guān)鍵詞(keyword)和一個(gè)等號(hào),等號(hào)右邊的就是關(guān)鍵字對(duì)應(yīng)的值(value)。其一般形式如下: Section1 KeyWord1 = Valuel KeyWord2 = V
5、alue2 Section2 KeyWord3 = Value3 KeyWord4 = Value42.1.1 節(jié)section2.1.2 參數(shù)name=value2.1.3 注解注解使用分號(hào)表示(;)。在分號(hào)后面的文字,直到該行結(jié)尾都全部為注解。如:; comment text2.2 操作C操作INI文件使用的是Windows系統(tǒng)自帶Win32的API函數(shù)WritePrivateProfileString()和GetPrivateProfileString()函數(shù)。這二個(gè)函數(shù)都位于“kernel32.dll”文件中。C中對(duì)Win32的API函數(shù)的互操作是通過命名空間“System.Runti
6、me.InteropServices”中的“DllImport”特征類來(lái)實(shí)現(xiàn)的。它的主要作用是指示此屬性化方法是作為非托管DLL的輸出實(shí)現(xiàn)的。2.2.1 讀取 DllImport ( "kernel32" ) private static extern int GetPrivateProfileString ( string section , string key , string def , StringBuilder retVal , int size , string filePath ) ; 參數(shù)說明:section:IN
7、I文件中的段落名稱;key:INI文件中的關(guān)鍵字;def:無(wú)法讀取時(shí)候時(shí)候的缺省數(shù)值;retVal:讀取數(shù)值;size:數(shù)值的大??;filePath:INI文件的完整路徑和名稱。 2.2.2 寫入 DllImport ( "kernel32" ) private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ; 參數(shù)說明:section:INI文件中的段落;key:INI文件中的關(guān)鍵字;val:I
8、NI文件中關(guān)鍵字的數(shù)值;filePath:INI文件的完整的路徑和名稱。2.3 實(shí)例下面是自行編寫的一個(gè)讀寫INI文件的類 class IniFile /絕對(duì)路徑(默認(rèn)執(zhí)行程序目錄) public string FilePath get; set; / <summary> / 讀取ini文件 / </summary> / <param name="section">段落名</param> / <param name="key">鍵</param> / <param name=&
9、quot;defVal">缺省值</param> / <param name="retVal">所對(duì)應(yīng)的值,如果該key不存在則返回空值</param> / <param name="size">值允許的大小</param> / <param name="filePath">INI文件的完整路徑和文件名</param> / <returns></returns> DllImport("kernel32&
10、quot;) private static extern int GetPrivateProfileString( string section, string key, string defVal, StringBuilder retVal, int size, string filePath); / <summary> / 寫入ini文件 / </summary> / <param name="section">段落名</param> / <param name="key">鍵</pa
11、ram> / <param name="val">值</param> / <param name="filePath">INI文件的完整路徑和文件名</param> / <returns></returns> DllImport("kernel32") private static extern long WritePrivateProfileString( string section, string key, string val, string fil
12、ePath); #region 靜態(tài)方法 public static string ReadVal(string section, string key, string filePath) string defVal = "" StringBuilder retVal = new StringBuilder(); int size = 10240; string rt = "" try GetPrivateProfileString(section, key, defVal, retVal, size, filePath); rt = retVal.To
13、String(); catch rt = "" return rt; public static bool WriteVal(string section, string key, string val, string filePath) try if (WritePrivateProfileString(section, key, val, filePath) = 0) return false; else return true; catch return false; #endregion #region 對(duì)象方法 public string ReadVal(stri
14、ng section, string key) string defVal = "" StringBuilder retVal = new StringBuilder(); int size = 10240; string rt = "" try GetPrivateProfileString(section, key, defVal, retVal, size, this.FilePath); rt = retVal.ToString(); catch rt = "" return rt; public bool WriteVal(
15、string section, string key, string val) try WritePrivateProfileString(section, key, val, this.FilePath); return true; catch return false; #endregion 3 Config配置文件3.1 文件內(nèi)容層次configuration為根節(jié)點(diǎn),其下可以帶有appSettings和connectionStrings兩個(gè)子節(jié)點(diǎn)。另外需要注意的是這兩個(gè)子節(jié)點(diǎn)中配置項(xiàng)的名稱和值并不一樣,appSettings中為“key”和“value”,connectionStrin
16、gs中為“name”和“connectionString”。粗略為如下所示:<configuration><appSettings><add key=”key1” value=”xxxx1”/><add key=”key2” value=”xxxx2”/></appSettins><connctionStrings><add name=”sql1” connecitonString=”xxxx1”/><add name=”sql2” connecitonString=”xxxx2”/></co
17、nnectionStrings></configuration>一個(gè)完整的config配置文件內(nèi)容:<?xml version="1.0"?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <appSettings> <add key="test1" value
18、="test1's value is test1!"/> <add key="test2" value="test2's value is test2!"/> </appSettings> <connectionStrings> <add name="sql1" connectionString="server=; database=testdb; uid=sa; pwd=sa"/> </connect
19、ionStrings></configuration>3.2 appSettings節(jié)的操作config文件中appSettings的讀取主要依靠ConfigurationManager類提供的兩個(gè)屬性:AppSettings和ConnectionStrings,通過字符串索引獲取對(duì)應(yīng)配置項(xiàng)的內(nèi)容。config文件中appSettings的讀取主要依靠ConfigurationManager類提供的屬性:AppSettings,通過字符串索引獲取對(duì)應(yīng)配置項(xiàng)的內(nèi)容。而寫入操作,必須要先讀取配置到一個(gè)特定的配置對(duì)象中,再作修改和保存。3.2.1 讀取通過Configuration
20、Manager.AppSettingskey讀取例子: public static string GetAppSetting(string key) string s = "" try s = ConfigurationManager.AppSettingskey; catch return s; 3.2.2 以配置對(duì)象為單位寫入寫入需要將配置文件讀取到Configuration對(duì)象中,然后在其中修改,最后保存。另外注意,Configuration類是沒有構(gòu)造函數(shù)的,需要使用ConfigurationManager類的OpenExeConfiguration()方法打開。3
21、.2.2.1 打開與 connectionStrings的打開相同1、 打開當(dāng)前程序的配置文件。Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);2、 打開指定路徑的配置文件。ConfigurationManager.OpenExeConfiguration(string exePath) 修改config.AppSettings.Settingskey.Value = value; /修改對(duì)應(yīng)項(xiàng)config.Save(Confi
22、gurationSaveMode.Modified); /保存ConfigurationManager.RefreshSection("appSettings"); /刷新配置文件管理類 添加config.AppSettings.Settings.Add(key, value); /添加/后續(xù)保存、刷新不累贅 刪除config.AppSettings.Settings.Remove(key); /刪除/后續(xù)保存、刷新不累贅3.2.3 以配置節(jié)為單位寫入通過獲取配置對(duì)象的指定節(jié),在節(jié)上進(jìn)行寫入操作。下面的修改為例(注:添加和刪除也大同小異)AppS
23、ettingsSection appSettings = (AppSettingsSection)m_Config.GetSection("appSettings");appSettings.Settingskey.Value = value;m_Config.Save();3.3 connectionStrings節(jié)的操作config文件中connectionStrings的讀取跟appSettings類似,也要依靠ConfigurationManager類提供的屬性,這個(gè)屬性為ConnectionStrings。寫入操作也類同。3.3.1 讀取Configuration
24、Manager.ConnectionStringsname.ToString()3.3.2 寫入 打開參照 修改config.ConnectionStrings.ConnectionStringsname.ConnectionString = connectionString;/config.ConnectionStrings.ConnectionStringsname.ProviderName = providerName; /該項(xiàng)可選 添加ConnectionStringSettings connSetting = new Conn
25、ectionStringSettings(name, connectionString, providerName); /生成項(xiàng) config.ConnectionStrings.ConnectionStrings.Add(connSetting); /添加/后續(xù)保存、刷新 刪除 m_Config.ConnectionStrings.ConnectionStrings.Remove(ConnectionStringSettings item); /通過指定項(xiàng)刪除 m_Config.ConnectionStrings.ConnectionStrings.Remove(name);
26、/通過名稱刪除3.3.3 以配置節(jié)為單位寫入直接上例子:ConnectionStringsSection connSection = (ConnectionStringsSection)m_Config.GetSection("connectionStrings");connSection.ConnectionStringsname.ConnectionString = connectionString;m_Config.Save();3.4 自定義配置節(jié)的操作利用Configuration的GetSection()方法,獲取后操作。3.5 實(shí)例直接上源代碼:using S
27、ystem;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;namespace TestConfig1 class ConfigMgr /如需要使用ConfigurationManager類還必須在“引用”中,引用System.Configuration /ConfigurationSettings只是針對(duì)舊版的兼容(向下兼容),不建議使用 /配置文件 private static Configuration m_Config = Configurat
28、ionManager.OpenExeConfiguration(ConfigurationUserLevel.None); /讀取當(dāng)前程序的配置文件 / <summary> / / </summary> / <param name="key"></param> / <returns></returns> public static string GetAppSetting(string key) string s = "" try s = ConfigurationManager.A
29、ppSettingskey; catch return s; public static string GetConnString(string name) string s = "" try if (ConfigurationManager.ConnectionStringsname != null) s = ConfigurationManager.ConnectionStringsname.ToString(); catch return s; / <summary> / 定義設(shè)置當(dāng)前或者其他應(yīng)用程序配置文件中的appSettings節(jié)點(diǎn),通過AppSet
30、tings屬性 / </summary> / <param name="key">keyName</param> / <param name="value">keyValue</param> public static bool SetAppSetting1(string key, string value) try if (m_Config.AppSettings.Settingskey != null) m_Config.AppSettings.Settingskey.Value = val
31、ue; else m_Config.AppSettings.Settings.Add(key, value); m_Config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); return true; catch return false; / <summary> / 定義設(shè)置當(dāng)前或者其他應(yīng)用程序配置文件中的appSettings節(jié)點(diǎn) / </summary> / <param name="key&qu
32、ot;>keyName</param> / <param name="value">keyValue</param> public static void SetAppSetting(string key, string value) AppSettingsSection appSettings = (AppSettingsSection)m_Config.GetSection("appSettings"); if (appSettings.Settingskey != null) appSettings.Set
33、tingskey.Value = value; m_Config.Save(); else appSettings.Settings.Add(key, value); m_Config.Save(); ConfigurationManager.RefreshSection("appSettings"); / <summary> / 定義設(shè)置當(dāng)前或者其他應(yīng)用程序配置文件中的connectionStrings節(jié)點(diǎn),通過ConnectionStrings屬性 / </summary> / <param name="key">
34、keyName</param> / <param name="value">keyValue</param> public static bool SetConnectionString1(string name, string connectionString, string providerName = "System.Data.SqlClient") try if (m_Config.ConnectionStrings.ConnectionStringsname != null) m_Config.Connect
35、ionStrings.ConnectionStringsname.ConnectionString = connectionString; m_Config.ConnectionStrings.ConnectionStringsname.ProviderName = providerName; /m_Config.Save(ConfigurationSaveMode.Modified); else ConnectionStringSettings connSetting = new ConnectionStringSettings(name, connectionString, provide
36、rName); m_Config.ConnectionStrings.ConnectionStrings.Add(connSetting); /config.Save(ConfigurationSaveMode.Modified); m_Config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("connectionStrings"); return true; catch return false; / <summary> / 定義設(shè)置當(dāng)前或者其他應(yīng)用程序配
37、置文件中的connectionStrings節(jié)點(diǎn) / </summary> / <param name="key">keyName</param> / <param name="value">keyValue</param> public static void SetConnectionString(string name, string connectionString, string providerName = "System.Data.SqlClient") /通過獲取對(duì)應(yīng)的節(jié)來(lái)操作實(shí)現(xiàn) /providerName = "System.Data.SqlClient" ConnectionStringsSection connSection = (ConnectionStringsSection)m_Config.GetSection("connectionStrings"); if (c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度三人合伙開展物流倉(cāng)儲(chǔ)服務(wù)合同
- 2024年店鋪分割財(cái)產(chǎn)分配協(xié)議
- 2024年廢窯廠坑塘土地租賃協(xié)議
- 2024年度0架AC3A直升機(jī)購(gòu)銷協(xié)議
- 2024年度煤炭買賣合同(長(zhǎng)協(xié))
- 2024水電安裝勞務(wù)分包合同范本
- 2024年度云計(jì)算服務(wù)與技術(shù)研發(fā)合同
- 2024年度新能源汽車銷售與服務(wù)分包合同
- 2024購(gòu)買車輛合同范本
- 2024年度智能家居解決方案合同
- 2024至2030年中國(guó)巖土工程市場(chǎng)深度分析及發(fā)展趨勢(shì)研究報(bào)告
- 新版高血壓病人的護(hù)理培訓(xùn)課件
- 醫(yī)院等級(jí)創(chuàng)建工作匯報(bào)
- 2024年江西省公務(wù)員錄用考試《行測(cè)》題(網(wǎng)友回憶版)(題目及答案解析)
- VDA6.3基礎(chǔ)培訓(xùn)考核測(cè)試卷附答案
- 第01講 正數(shù)和負(fù)數(shù)、有理數(shù)-人教版新七年級(jí)《數(shù)學(xué)》暑假自學(xué)提升講義(解析版)
- 信息系統(tǒng)部署與運(yùn)維-題庫(kù)帶答案
- 婚姻心理學(xué)解讀包含內(nèi)容
- DZ/T 0462.3-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第3部分:鐵、錳、鉻、釩、鈦(正式版)
- 備戰(zhàn)2024年高考英語(yǔ)考試易錯(cuò)點(diǎn)12 名詞性從句(4大陷阱)(解析版)
- 公務(wù)員歷史常識(shí)100題及一套完整答案
評(píng)論
0/150
提交評(píng)論