C#各種配置文件使用,操作方法總結


配置文件操作

   1、配置文件一般分為內置配置文和用戶自定義配置文件。

   內置配置文件包括app.config、web.config、Settings.settings等等。

用戶自定義配置文件一般是將配置信息放到XML文件或注冊表中,配置信息一般包括程序設置,記錄運行信息,保存控件的信息(比如位置,樣式)。

一、內置配置文件操作

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

1.app.config文件操作

該配置文件中主要的節點有:connectionStrings、appSettings、configSections等,這幾個屬於常用,操作都略有不同,DotNet提供直接操作各個節點的方法。在用到ConfigurationManager時要添加system.configuration.dll程序集的引用。

程序移植后配置文件的修改會保存在.exe.config的文件中,但是根據我經驗如果你不修改配置文件,一般exe不自動創建一個.exe.config的文件。

在項目進行編譯后,在bin\Debuge文件下,將出現兩個配置文件,一個名為“*.EXE.config”,另一個名為“*.vshost.exe.config”。第一個文件為項目實際使用的配置文件,在程序運行中所做的更改都將被保存於此;第二個文件為原代碼“app.config”的同步文件,在程序運行中不會發生更改。

l  connectionStrings:由於保存數據連接字符串。

讀:

ConfigurationManager.ConnectionStrings["AccessDB"].ConnectionString;

寫:

//設置連接字符串

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

//打開當前應用程序的app.config文件,進行操作

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

//由於沒有更新連接字符串的方法,所以這里直接再添加一個連接字符串

appConfig.ConnectionStrings.ConnectionStrings.Add(setConnStr);

appConfig.Save();

// 強制重新載入配置文件的ConnectionStrings配置節

ConfigurationManager.RefreshSection("connectionStrings");

l  appSettings:主要存儲程序設置,以鍵值對的形式出現。

讀:

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

寫:

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

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

cfg.Save();

l  configSections:自定義配置節

name:自定義配置節的名稱。

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

System.Configuration.SingleTagSectionHandler

System.Configuration.DictionarySectionHandler

System.Configuration.NameValueSectionHandler。

不同的type不但設置配置節的方式不一樣,最后訪問配置文件的操作上也有差異。

三個不同的type操作:

說明:在聲明部分使用聲明了一個配置節它的名字叫Test1,類型為SingleTagSectionHandler。在設置配置節部分使用 設置了一個配置節,它的第一個設置的值是Hello,第二個值是World,當然還可以有更多。其它的兩個配置節和這個類似。

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

//訪問配置節Test1

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

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

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

//訪問配置節Test1的方法2

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

IDTest1.Values.CopyTo(values1,0);

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

//訪問配置節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]);

//訪問配置節Test3

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

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

配置節處理程序

返回類型

SingleTagSectionHandler

Systems.Collections.IDictionary

DictionarySectionHandler

Systems.Collections.IDictionary

NameValueSectionHandler

Systems.Collections.Specialized.NameValueCollection

l  sectionGroup:自定義配置節組

配置節組是使用元素,將類似的配置節分到同一個組中。配置節組聲明部分將創建配置節的

包含元素,在元素中聲明配置節組,並將屬於該組的節置於元素中。下面

是一個包含配置節組的配置文件的例子:

   

       

           

   

       

           

下面是訪問這個配置節組的代碼:

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

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

2.Settings.settings配置文件操作

這個用的不多,操作也很簡單,在此不詳細敘述。

二、用戶自定義文件操作

1.XML配置文件操作

XML配置文件一般由我們自己定義格式,由於某些地方對於app.config不提供寫的功能,我們就需要自己來操作這個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

{

//獲得將當前元素的key屬性

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

//根據元素的第一個屬性來判斷當前的元素是不是目標元素

if (att.Value=="ConnectionString")

{

//對目標元素中的第二個屬性賦值

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

att.Value=ConnenctionString;

break;

}

}

//保存上面的修改

doc.Save(strFileName);

}

2.注冊表配置操作

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

操作實例:

        ///

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

///

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();

       }

三、應用程序信息配置

通過代碼繼承ApplicationSettingsBase類(C/S模式),在代碼中設置相關的屬性。

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

  2.每個屬性必須設置是[ApplicationScopedSetting()]還是[UserSocpedSetting()],還可以設置默認值[DefaultSettingValueAttribute("100,100")]

  3.屬性設置完成后,在方法級別或方法內部(視情況而定)實例化該繼承的類,在窗體加載時設置相應屬性。加載程序配置方法有兩種-詳情如下。

  4.如果需要可以利用事件監視設置的屬性改變、保存、加載時進行哪些操作

  5.在窗體注銷時保存設置。

詳解:

(一),LocalFileSettingsProvider---為應用程序設置類提供持久性存儲。

    1.該類提供一種機制--程序使用配置數據的機制,其將程序的設置文件保存到默認的位置。

    2.客戶端並不顯示訪問這個類,而是在需要服務時由設置機制自動調用,如:ApplicationSettingsBase中的很多成員都使用該類。

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

        1.若字段的屬性設置為[UserScopedSetting()],則保存為user.config文件,

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

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

          保存位置:與可執行文件相同的目錄中。

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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM