簡體   English   中英

C#在應用程序內動態進行設置,然后永久保存

[英]C# Dynamically make settings within application then save persistently

我正在尋找許多不同的方式來做到這一點,但我不確定應該走的方向...

我有一個可以在多台個人計算機上運行的應用程序。 我正在尋找一種持久保留應用程序設置列表的方法。

想法是用戶將能夠在應用程序列表中進行選擇。 這些應用程序將被保存,直到用戶將其刪除為止。 我需要保存應用程序名稱和相應的路徑。

問題在於,我似乎無法將鍵,值對保存到Visual Studio中的新設置,並使它們持久化。 我需要寫一個文件來保存文件,我該怎么做...我應該將它們寫到system.configuration,JSON還是XML? 有人有很好的演練嗎?

好吧,有很多方法可以做到這一點。 對於一種簡單的方法,可以使用XML序列化。 首先創建一個代表您要保存的所有設置的類,然后向其中添加Serializable屬性,例如:

[Serializable]
public class AppSettings
{
    public List<UserApp> Applications { get; set; }
}

[Serializable]
public class UserApp
{
    public string Path { get; set; }
    public string Name { get; set; }
}

然后,向其添加以下方法:

public static void Save(AppSettings settings)
{
    string xmlText = string.Empty;
    var xs = new XmlSerializer(settings.GetType());
    using (var xml = new StringWriter())
    {
        xs.Serialize(xml, settings);
        xml.Flush();
        xmlText = xml.ToString();
    }
    string roamingPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    File.WriteAllText(roamingPath + @"\settings.xml", xmlText);
}

public static AppSettings Load()
{
    string roamingPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

    if (!File.Exists(roamingPath + @"\settings.xml"))
        return new AppSettings();

    string xmlText = File.ReadAllText(roamingPath + @"\settings.xml");
    var xs = new XmlSerializer(typeof(AppSettings));
    return (AppSettings)xs.Deserialize(new StringReader(xmlText));
}

然后,要保存,請執行以下操作:

AppSettings settings = new AppSettings();
settings.Applications = new List<UserApp>();

settings.Applications.Add(new UserApp { Path = @"C:\bla\foo.exe", Name = "foo" });

AppSettings.Save(settings);

並加載:

AppSettings settings = AppSettings.Load();

您也可以編輯已加載的設置並再次保存,以覆蓋較舊的設置。

有關更復雜的方法,請保存到數據庫中。

使用以下屏幕快照中的說明將設置添加到設置:

注意:雙擊第一個箭頭所示的屬性

在此處輸入圖片說明

然后,您可以像這樣在運行時更新該值:

namespace ConsoleApplication1
{
    public class Program
    {
        public static void Main()
        {
            var defSettings = ConsoleApplication1.Properties.Settings.Default;
            var props = defSettings.Test = "Whatever";

            // Save it so it persists between application start-ups
            defSettings.Save();

            Console.Read();
        }
    }
}

設置將存儲在用戶的配置文件中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM