在C#中保存持久化设置的最佳做法
在C#中保存持久化设置的最佳做法
我想实现的很简单:我有一个使用路径来读取信息的Windows Forms(.NET 3.5)应用程序。用户可以通过使用我提供的选项窗体来修改这个路径。现在,我想将路径值保存到文件中以供以后使用。这将是保存到此文件的许多设置之一。该文件将直接位于应用程序文件夹中。我了解到有三个选项可用:
配置设置文件(appname.exe.config)
注册表
自定义XML文件
我读到.NET配置文件并不适合用来保存值。至于注册表,我想离它越远越好。这是否意味着我应使用自定义XML文件来保存配置设置呢?如果是这样,我想看到那方面的代码示例(使用C#)。我已经看到其他关于这个主题的讨论,但对我来说还不清楚。
admin 更改状态以发布 2023年5月21日
如果您计划将文件保存在与可执行文件相同的目录中,这里有一个使用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; } } }
如果您使用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