C#中配置文件的操作_第1頁
C#中配置文件的操作_第2頁
C#中配置文件的操作_第3頁
C#中配置文件的操作_第4頁
C#中配置文件的操作_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C#中配置文件的操作注:從網(wǎng)上收集整理了關于C#中配置文件的資料,以下是自己的學習筆記,希望能給大家一點幫助,如有錯漏,懇請指出。1 配置文件介紹程序配置文件實質(zhì)上是應用程序的一種針對配置信息讀寫最簡單的工具。它重要的功能就是將命令行選項和配置文件選項統(tǒng)一到一種數(shù)據(jù)結(jié)構(gòu)中,這樣的話可以在外部設置參數(shù),而無須修改代碼來達到我們想要的效果。配合上配置文件的讀寫接口,操作上也較為方便。過去常見的配置文件是以“.ini”為后綴的文本文件。INI,是英文“初始化(Initial)”的縮寫。正如該術語所表示的,INI文件被用來對操作系統(tǒng)或特定程序初始化或進行參數(shù)設置。格式上主要分為“節(jié)”、“參數(shù)”和“注解

2、”三部分。后來由于Windows95推出了注冊表的概念,INI配置文件在系統(tǒng)中的地位就大不如前了。不過作為應用程序的配置讀寫來說,INI還是有其牢固的地位的。后來XML的發(fā)展也為配置文件提供了一種更好的存儲格式。常見到的“config”文件擴展名的文件,也是在C#編程中較為常用的。C#的配置文件在編碼階段,可通過添加新項找到(名為“應用程序配置文件”),添加入項目后名為app.config,程序編譯后一般是以“程序名”+“.exe”+“.config”命名的文件出現(xiàn)。config文件的內(nèi)容與配置相關的分為兩大部分,一部分為應用程序的配置節(jié)(appSettings),另一部分為連接字符串的配置節(jié)

3、(connectionStrings)??墒褂肅#提供的ConfigurationManager(原先使用ConfigureationSettings,現(xiàn)已棄用)進行讀取。ConfigurationManager中比較重要的是AppSettings和ConnectionStrings兩個屬性,分別負責讀取應用程序的配置項(appSettings)和連接字符串的配置項(connectionStrings)。如果要修改配置文件項,需要先通過ConfigurationManager的OpenExeConfigureation()方法讀取信息到Configuration類中,再修改其中對應項的信息,然

4、后執(zhí)行保存,最后如果要將結(jié)果調(diào)用出來,還需要ConfigurationManager調(diào)用RefreshSection()方法進行刷新。以上是對配置文件一些簡單的介紹。下面我們來詳細看一下配置文件的各種功能和用法。2 INI配置文件2.1 格式INI配置文件以”ini”為文件擴展名,內(nèi)容格式為:節(jié)、參數(shù)和注解。每一個INI文件構(gòu)成都非常類似,由若干段落(section)組成,在每個帶括號的標題下面,是若干個以單個單詞開頭的關鍵詞(keyword)和一個等號,等號右邊的就是關鍵字對應的值(value)。其一般形式如下: Section1 KeyWord1 = Valuel KeyWord2 = V

5、alue2 Section2 KeyWord3 = Value3 KeyWord4 = Value42.1.1 節(jié)section2.1.2 參數(shù)name=value2.1.3 注解注解使用分號表示(;)。在分號后面的文字,直到該行結(jié)尾都全部為注解。如:; comment text2.2 操作C操作INI文件使用的是Windows系統(tǒng)自帶Win32的API函數(shù)WritePrivateProfileString()和GetPrivateProfileString()函數(shù)。這二個函數(shù)都位于“kernel32.dll”文件中。C中對Win32的API函數(shù)的互操作是通過命名空間“System.Runti

6、me.InteropServices”中的“DllImport”特征類來實現(xiàn)的。它的主要作用是指示此屬性化方法是作為非托管DLL的輸出實現(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文件中的關鍵字;def:無法讀取時候時候的缺省數(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文件中的關鍵字;val:I

8、NI文件中關鍵字的數(shù)值;filePath:INI文件的完整的路徑和名稱。2.3 實例下面是自行編寫的一個讀寫INI文件的類 class IniFile /絕對路徑(默認執(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">所對應的值,如果該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 對象方法 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é)點,其下可以帶有appSettings和connectionStrings兩個子節(jié)點。另外需要注意的是這兩個子節(jié)點中配置項的名稱和值并不一樣,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>一個完整的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類提供的兩個屬性:AppSettings和ConnectionStrings,通過字符串索引獲取對應配置項的內(nèi)容。config文件中appSettings的讀取主要依靠ConfigurationManager類提供的屬性:AppSettings,通過字符串索引獲取對應配置項的內(nèi)容。而寫入操作,必須要先讀取配置到一個特定的配置對象中,再作修改和保存。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 以配置對象為單位寫入寫入需要將配置文件讀取到Configuration對象中,然后在其中修改,最后保存。另外注意,Configuration類是沒有構(gòu)造函數(shù)的,需要使用ConfigurationManager類的OpenExeConfiguration()方法打開。3

21、.2.2.1 打開與 connectionStrings的打開相同1、 打開當前程序的配置文件。Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);2、 打開指定路徑的配置文件。ConfigurationManager.OpenExeConfiguration(string exePath) 修改config.AppSettings.Settingskey.Value = value; /修改對應項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é)為單位寫入通過獲取配置對象的指定節(jié),在節(jié)上進行寫入操作。下面的修改為例(注:添加和刪除也大同小異)AppS

23、ettingsSection appSettings = (AppSettingsSection)m_Config.GetSection("appSettings");appSettings.Settingskey.Value = value;m_Config.Save();3.3 connectionStrings節(jié)的操作config文件中connectionStrings的讀取跟appSettings類似,也要依靠ConfigurationManager類提供的屬性,這個屬性為ConnectionStrings。寫入操作也類同。3.3.1 讀取Configuration

24、Manager.ConnectionStringsname.ToString()3.3.2 寫入 打開參照 修改config.ConnectionStrings.ConnectionStringsname.ConnectionString = connectionString;/config.ConnectionStrings.ConnectionStringsname.ProviderName = providerName; /該項可選 添加ConnectionStringSettings connSetting = new Conn

25、ectionStringSettings(name, connectionString, providerName); /生成項 config.ConnectionStrings.ConnectionStrings.Add(connSetting); /添加/后續(xù)保存、刷新 刪除 m_Config.ConnectionStrings.ConnectionStrings.Remove(ConnectionStringSettings item); /通過指定項刪除 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 實例直接上源代碼: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只是針對舊版的兼容(向下兼容),不建議使用 /配置文件 private static Configuration m_Config = Configurat

28、ionManager.OpenExeConfiguration(ConfigurationUserLevel.None); /讀取當前程序的配置文件 / <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> / 定義設置當前或者其他應用程序配置文件中的appSettings節(jié)點,通過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> / 定義設置當前或者其他應用程序配置文件中的appSettings節(jié)點 / </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> / 定義設置當前或者其他應用程序配置文件中的connectionStrings節(jié)點,通過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> / 定義設置當前或者其他應用程序配

37、置文件中的connectionStrings節(jié)點 / </summary> / <param name="key">keyName</param> / <param name="value">keyValue</param> public static void SetConnectionString(string name, string connectionString, string providerName = "System.Data.SqlClient") /通過獲取對應的節(jié)來操作實現(xiàn) /providerName = "System.Data.SqlClient" ConnectionStringsSection connSection = (ConnectionStringsSection)m_Config.GetSection("connectionStrings"); if (c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論