在C#中保存持久化设置的最佳做法

13 浏览
0 Comments

在C#中保存持久化设置的最佳做法

我想实现的很简单:我有一个使用路径来读取信息的Windows Forms(.NET 3.5)应用程序。用户可以通过使用我提供的选项窗体来修改这个路径。现在,我想将路径值保存到文件中以供以后使用。这将是保存到此文件的许多设置之一。该文件将直接位于应用程序文件夹中。我了解到有三个选项可用:

配置设置文件(appname.exe.config)

注册表

自定义XML文件

我读到.NET配置文件并不适合用来保存值。至于注册表,我想离它越远越好。这是否意味着我应使用自定义XML文件来保存配置设置呢?如果是这样,我想看到那方面的代码示例(使用C#)。我已经看到其他关于这个主题的讨论,但对我来说还不清楚。

admin 更改状态以发布 2023年5月21日
0
0 Comments

如果您计划将文件保存在与可执行文件相同的目录中,这里有一个使用JSON格式的不错解决方案:

using System;
using System.IO;
using System.Web.Script.Serialization;
namespace MiscConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            MySettings settings = MySettings.Load();
            Console.WriteLine("Current value of 'myInteger': " + settings.myInteger);
            Console.WriteLine("Incrementing 'myInteger'...");
            settings.myInteger++;
            Console.WriteLine("Saving settings...");
            settings.Save();
            Console.WriteLine("Done.");
            Console.ReadKey();
        }
        class MySettings : AppSettings
        {
            public string myString = "Hello World";
            public int myInteger = 1;
        }
    }
    public class AppSettings where T : new()
    {
        private const string DEFAULT_FILENAME = "settings.json";
        public void Save(string fileName = DEFAULT_FILENAME)
        {
            File.WriteAllText(fileName, (new JavaScriptSerializer()).Serialize(this));
        }
        public static void Save(T pSettings, string fileName = DEFAULT_FILENAME)
        {
            File.WriteAllText(fileName, (new JavaScriptSerializer()).Serialize(pSettings));
        }
        public static T Load(string fileName = DEFAULT_FILENAME)
        {
            T t = new T();
            if(File.Exists(fileName))
                t = (new JavaScriptSerializer()).Deserialize(File.ReadAllText(fileName));
            return t;
        }
    }
}

0
0 Comments

如果您使用Visual Studio,则获得可持久化设置就非常简单。在Solution Explorer中右键单击项目并选择属性。选择设置选项卡,如果没有设置选项,则单击超链接。
使用设置选项卡创建应用程序设置。Visual Studio创建包含继承自ApplicationSettingsBase的Singleton类Settings的文件Settings.settings和Settings.Designer.settings。您可以从代码中访问此类以读取/编写应用程序设置:

Properties.Settings.Default["SomeProperty"] = "Some Value";
Properties.Settings.Default.Save(); // Saves settings in application configuration file


该技术适用于控制台、Windows窗体和其他项目类型。
请注意,您需要设置设置的范围属性。如果选择应用程序范围,则Settings.Default.将是只读的。
参考:如何:使用C#在运行时编写用户设置 - Microsoft Docs

0