在Windows窗体应用程序中保存应用程序设置的最佳做法

我想实现的非常简单:我有一个使用路径读取信息的Windows窗体(.NET 3.5)应用程序。 该路径可以由用户通过使用我提供的选项来修改。

现在,我想将路径值保存到文件中供以后使用。 这将是保存到此文件的许多设置之一。 该文件将直接位于应用程序文件夹中。

我明白有三个选项可用:

  • ConfigurationSettings文件(appname.exe.config)
  • 注册处
  • 自定义XML文件
  • 我读过.NET配置文件没有预见将值保存回它。 至于注册表,我希望尽可能远离它。

    这是否意味着我应该使用自定义XML文件来保存配置设置? 如果是这样,我想看看(C#)的代码示例。

    我已经看到关于这个问题的其他讨论,但它仍然不清楚。


    如果你使用Visual Studio,那么获得持久化设置非常容易。 在解决方案资源管理器中右键单击项目,选择属性。 选择设置选项卡,如果设置不存在,请单击超链接。 使用设置选项卡来创建应用程序设置。 Visual Studio创建Settings.settingsSettings.Designer.settings文件,这些文件包含从ApplicationSettingsBase继承的单例类Settings 。 您可以从您的代码访问此类以读取/写入应用程序设置:

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

    此技术适用于控制台,Windows窗体和其他项目类型。

    请注意,您需要设置设置的范围属性。 如果您选择应用程序范围,则Settings.Default。<您的属性>将是只读的。


    如果您计划将其保存到与您的可执行文件相同的目录中的文件中,以下是使用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<MySettings>
            {
                public string myString = "Hello World";
                public int myInteger = 1;
            }
        }
    
        public class AppSettings<T> 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<T>(File.ReadAllText(fileName));
                return t;
            }
        }
    }
    

    注册表是一个不可行的。 您不确定使用您的应用程序的用户是否具有足够的权限来写入注册表。

    您可以使用app.config文件来保存应用程序级别的设置(对于每个使用您的应用程序的用户来说都是一样的)。

    我会将用户特定的设置存储在XML文件中,该文件将保存在独立存储或SpecialFolder.ApplicationData目录中。

    接下来,从.NET 2.0开始,可以将值存储回app.config文件。

    链接地址: http://www.djcxy.com/p/22715.html

    上一篇: Best practice to save application settings in a Windows Forms Application

    下一篇: AEM and customized emails