2012-08-22 39 views
4

我主要是C#.NET 4.0開發人員,現在我正在重新考慮過去存儲和檢索應用程序設置的方法。什麼是存儲和檢索應用程序設置的正確方法?

在我已經使用了各種方法,從簡單的標籤「平」的文本文件過去分離鍵/值,以分層的XML文件,以及兩者之間的其他一些東西。我過去曾經使用(並且正在考慮再次使用)內置的App.Config/AppSettings類,但是沒有任何內置的方式可以保存您從此源加載的數據(我可以進入我在做這件事時遇到的困難,但這不是問題的關鍵)。

這裏的要點是,所有這些方法都有其缺點,雖然有些方法比其他方法更好,但有些方法比其他方法更容易使用,而我正試圖確定一些可靠和一致的方法。

我的問題,它可能會有一些有效的答案,所以我會被迫挑選最好的答案,是這樣的:如果任何內置的框架將''建議保存和加載數據和在可執行文件附帶的設置文件中,或者如果不是內置框架,您會推薦什麼標準? XML? '平'的文件?獨立數據庫?

假設配置本身不會那麼大,並且數據的任何實際數量將從數據庫中讀取(或使用一些其他技術)。

+0

好問題,但我認爲這是非常個人化的我愛KERNEL32 WritePrivateProfileString,我有強烈的意見,沒有什麼可以打敗它在簡單的穩定性和速度,我可以爲C#提供的接口,如果你喜歡[是的,我不投票關閉] – Cynede

+0

雖然這確實有一些問題,但你已經建議你自己沒有「正確的」答案。我也不清楚你使用'app.config'方法的問題是什麼(當然,你會*保存你加載到'app.config'的數據?)。你可以擴展嗎? –

+1

肯定丹;我現在遇到的問題是我的AppSettings字典是ReadOnly,因此我無法刪除/添加項目。我可以考慮的唯一方法就是可以將我的應用程序設置保存迴文件,是通過重寫整個文件,我並不特別熱衷於追求。沒有「正確的」答案,因爲這是關於什麼是「最佳」解決方案的意見問題,但是有相當多的「有效」答案。我只是尋找最可靠,功能全面的方法來執行任務。感謝您的意見。 – DigitalJedi805

回答

2

雖然我是個註冊表迷,寧願我的設置那裏,我的C#應用​​程序,我使用了過來建在設置 - 所以在項目屬性,你可以定義負載,以及它們的默認值,然後與

Properties.Settings.Default.<settingname> 

訪問它們並可以設定他們太多,所以Properties.Settings.Default.HideDisabled = true;

,您可以用

Properties.Settings.Default.Save(); 

伊夫拯救他們與T沒有問題他的,但是,正如你所說,一切都有一個專業和一個騙局。

+0

這是迄今爲止最好和最方便的方式來存儲用戶設置,恕我直言。 –

+0

(無法編輯我以前的評論)當然,我的意思是說應用程序設置,而不是用戶設置。 –

+0

這似乎是一種合理的追求方法,但我過去沒有使用過。我想知道你是否可以將我指向'Hello World'或者其他類似的用法? – DigitalJedi805

2

只是另一種方式(KERNEL32),這不是很瞭解C#甚至C#4.0,但我們已經開始變的名單必須在這裏

namespace Ini { 
    public class IniFile { 
     private string path; 
     [DllImport("kernel32")] 
     private static extern long WritePrivateProfileString(string section, 
      string key, string val, string filePath); 
     [DllImport("kernel32")] 
     private static extern int GetPrivateProfileString(string section, 
        string key, string def, StringBuilder retVal, 
      int size, string filePath); 
     public IniFile(string INIPath) { 
      path = INIPath; 
      } 
     public void IniWriteValue(string Section, string Key, string Value) { 
      WritePrivateProfileString(Section, Key, Value, this.path); 
      } 
     public string IniReadValue(string Section, string Key) { 
      StringBuilder temp = new StringBuilder(255); 
      int i = GetPrivateProfileString(Section, Key, "", temp, 
              255, this.path); 
      return temp.ToString(); 
      } 
     } 
    } 
1

有效的幾個應用程序,我對工作涉及地方數據庫,我們使用該數據庫文件來保存我們的設置。它可以工作,但它只是感覺有點不對勁,如果您希望在應用程序未運行時能夠修改設置,則可能會出現問題。 (繞過崩潰或類似的東西。)

大多數情況下,我只會使用存儲在Environment.SpecialFolder.ApplicationData文件夾中的XML文件並使用DataContractSerializer。它允許您執行一些版本控制,但最重要的是,它可以在您的設置對象上的某些屬性是新的或不存在時加載和保存XML文件。它不會使應用程序崩潰,當您再次保存設置時,它只會保存最新版本。我認爲它很乾淨,意味很簡單。

相關問題