2011-06-19 21 views
3

我發現了類似於我需要的東西: http://www.codeproject.com/KB/cs/PropertiesSettings.aspx 但它不完全適合我。用戶設置存儲在一些很遠的位置,例如C:\documents and settings\[username]\local settings\application data\[your application],但我無法訪問這些文件夾,我無法將設置文件從一臺計算機複製到另一臺計算機,或者完全刪除該文件。此外,將應用程序旁邊的設置xml文件設置爲非常方便,並複製/發佈這兩個文件。這用於演示程序(這是一種合法的編碼任務),並且將由該領域的非技術人員使用。我需要快速完成,所以我需要重新使用一些現有的庫,而不是自己寫。我需要使它易於使用和便攜。我想要的最後一件事就是在午夜撥打電話,說通過我將要建立的設置對話框進行編輯時,設置不會持續。如何使用讀/寫本地XML設置?

因此,用戶設置存儲在上帝知道的地方,並且應用程序設置是隻讀的(不行)。還有什麼我可以做的嗎?我認爲app.config文件有多種用途,我想我曾經看到它以我想要的方式使用,但我找不到鏈接。

讓我知道如果有什麼不清楚。

+1

有兩種基本原因的設置通常不會被儲存在了excutable:1,用戶往往不具備寫入可執行文件的文件夾(例如,如果它在Program Files中); 2.一臺電腦可以有多個用戶,每個用戶都需要他自己的設置。如果你想違背既定慣例(如果你知道各地的系統管理員會恨你),你最好有一個很好的理由。 – Sven

+0

@Sven,我確實有我已經列出的理由。在實踐中,我從來沒有遇到過我無法訪問的exe文件,但用戶設置 - 我無法得到。 –

回答

5

你可以創建一個保存你的設置一個類,然後XML序列化它:

public class Settings 
{ 
    public string Setting1 { get; set; } 
    public int Setting2 { get; set; } 
} 

static void SaveSettings(Settings settings) 
{ 
    var serializer = new XmlSerializer(typeof(Settings)); 
    using (var stream = File.OpenWrite(SettingsFilePath)) 
    { 
     serializer.Serialize(stream, settings); 
    } 
} 

static Settings LoadSettings() 
{ 
    if (!File.Exists(SettingsFilePath)) 
     return new Settings(); 

    var serializer = new XmlSerializer(typeof(Settings)); 
    using (var stream = File.OpenRead(SettingsFilePath)) 
    { 
     return (Settings)serializer.Deserialize(stream); 
    } 
} 
+0

謝謝,你可以添加更多的細節? –

+0

@Hamish,看到編輯答案。 – svick

+0

謝謝!在'using'裏面使用'var serializer = new XmlSerializer(typeof(Settings))'會是無用的嗎? –