2009-10-18 67 views
1

我不一定指的是app.configs,而是一個自定義配置文件,只要用戶點擊「保存」按鈕就可以存儲我的程序狀態。(.Net)關於爲程序配置文件的建議?

在我的示例中,它是一個UI構建器,允許用戶選擇要在兩列屏幕的左列和右列顯示哪些「字段」,以及每列中字段的順序。還有其他的東西,但你明白了。

用戶可以打開他們保存的任何配置文件並適當地填充UI構建器。

我在想這可能存儲在一個XML文件中,但我想知道人們會如何寫出來,如何從中讀取(使用LINQ也許?)和其他一般方法,包括版本控制等等。我確信這已經出現,我想聽聽最佳做法。謝謝!

回答

4

我用於我的程序的方法是將我的配置值保存在使用DataSet中的DataTable存儲值的類中。當我想保存它時,我將DataSet.WriteXML()用於用戶想要的任何文件名。我現在的使用非常簡單(一個DataTable與鍵,值列),但它很容易擴展到多個相關的DataTables與特定列的各種信息。 DataSet處理文件io。

然後用DataSet.ReadXML()重新讀入是一件輕而易舉的事情。

該方法在序列化類上的一個優點是處理從以前版本的程序中保存的文件要容易得多。您可以在表格中爲用於保存的程序版本設置一個值,這樣您的較新版本就會知道較舊的文件在新版本中不會添加任何值 - 並且可以正確設置它們以更新文件版。

如果您向類(值,方法)添加新功能,它的序列化文件將與早期版本不同 - 不知道處理這些較舊文件是多麼容易。

這是一個簡單的example class

像這樣來使用,使得file like this

To create a new one: 
     Dim UIcfg As UIsettings = New UIsettings("TestSettings.cfg") 

     UIcfg.setGeneralValue("Version", "1.0.0") 
     UIcfg.setGeneralValue("Author", "Bobs YourUncle") 

     UIcfg.setFieldValues("FirstName", "Left", "1") 
     UIcfg.setFieldValues("LastName", "Right", "1") 
     UIcfg.setFieldValues("ShoeSize", "Left", "2") 
     UIcfg.setFieldValues("ShoeColor", "Left", "3") 

     UIcfg.Save() 

To get values from it: 
     Dim value As String = "" 
     Dim values As String = "" 
     value = UIcfg.getGeneralValue("Author") 
     values = UIcfg.getFieldValues("FirstName") 

代碼比試圖解釋一個概念就輕鬆多了。 :-)

+0

聽起來像一個很好的策略。謝謝! – larryq 2009-10-18 16:59:50

6

它是否必須有些人的可讀性?或者用戶不在意......只保存我的設置...並讓我稍後重新加載它們?

如果沒有,只需創建/設計一組具有有意義屬性的對象...創建實例...並將對象序列化(二進制或肥皂或自定義)到磁盤。然後,您可以隨時從磁盤「重新保存」對象。

如果可能,我總是喜歡不要重新發明輪子。讓框架完成這項工作。