1. 程式人生 > >C# 如何使用配置檔案儲存應用程式裡的配置資料

C# 如何使用配置檔案儲存應用程式裡的配置資料

引言

我不知大家早先是如何儲存應用程式配置,以備下次開啟時使用的,反正我開始學.Net的時候就去研究序列化,以二進位制或XML格式的序列化來儲存應用程式配置。這樣每次都要建立單獨的配置類,並書寫讀寫配置程式碼,相當麻煩。

期間也看了看.config檔案的讀寫方式,感覺還是很麻煩,不如自己序列化來的踏實。

後來才猛然發現微軟早提供好了settings,用以定義.config檔案內容,並生成相應的強型別類,使用起來極其方便~,感覺就像在火星居住了半輩子突然發現還有地球這好地方*_*~

鑑於網上settings方面的資料不多、不詳,我就以此文來介紹一下基本的用法,讓小鳥們少走我那條破路,老鳥請直接從上空滑翔而過即可。

基本使用方法

首先建立一個WinForm專案,設計這樣一個窗體:

image

通過“新增新項”功能新增一個MyApp.settings:

 image

在開啟的資料表格中做如下設定:

image

這樣就設定好了a、b、c三個不同型別的配置變數,現在就可以在程式中使用它們了:

private void Form1_Load(object sender, EventArgs e)

{

    numericUpDown1.Value = MyApp.Default.a;

    textBox1.Text = MyApp.Default.b;

    checkBox1.Checked = MyApp.Default.

c;

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

    MyApp.Default.= numericUpDown1.Value;

    MyApp.Default.= textBox1.Text;

    MyApp.Default.= checkBox1.Checked;

    MyApp.Default.Save();

}

通過上面的程式碼就可以在窗體開閉時分別載入、儲存配置了。

執行抓圖:

image

複雜資料型別支援情況

settings支援儲存一些較為複雜的資料,比如Color、Size等型別,可以自行選擇:

image

但並不是所有型別都可以支援,比如FileInfo型別就沒有,泛型也沒有,自定義型別更是不受支援的,如果需要儲存這些特殊型別,就得用其他配置方案了。

讀寫複雜資料型別

我們以ArrayList型別為例,通過它在原程式的基礎上實現記錄每次關閉程式時間的功能。

首先新增一個配置變數d,其型別為System.Collections.ArrayList:

image

在窗體中增加一個ListBoxt,然後修改後臺程式碼為:

image

高亮部分為新增的程式碼。

多次執行以測試:

image

 可以看到每次的程式關閉時間都被記錄並顯示。

“使用者”和“應用程式”

你可能注意到資料表格中“範圍”這裡全是“使用者”:

image

如果改成另外一個選項,即“應用程式”會怎樣呢?

image

報錯了,我們的配置變數變成只讀的了,所以這裡可以簡單地把它們理解為:

使用者=可讀寫

應用程式=只讀

“應用程式”選項應當是用於設定一些程式執行所必須的重要變數,比如導航網址、數學運算引數等,這些配置項如果讓使用者篡改就會出問題了,所以要只讀。

資料被存在哪裡?

你可能會發現編譯後在Debug目錄中有個“SettingTest.exe.config”,但無論如何操作程式,這個配置檔案裡始終都是描述的預設配置。

其實資料是被存在了“C:\Users\SkyD\AppData\Local\”目錄中(我這是Windows7,XP或以下版本可能不是這裡)

我在“C:\Users\SkyD\AppData\Local\SettingTest\SettingTest.vshost.exe_Url_ffofch2tvz5bil2xbhdayqbnqwppy2ce\1.0.0.0”這個目錄中找到了配置檔案(user.config),這是其描述的配置資訊:

image

結語

雖然settings無法實現對一些複雜型別及自定義型別的支援,但是在多數情況下,用它來儲存程式配置已是綽綽有餘了,在夠用的前提下,不要重複造輪子啦。

轉自:http://www.cnblogs.com/SkyD/archive/2009/09/14/1566048.html