代码之家  ›  专栏  ›  技术社区  ›  Sharun

WPF/C#:我应该在哪里保存用户首选项文件?

  •  52
  • Sharun  · 技术社区  · 17 年前

    建议保存用户首选项文件的位置是什么?是否有处理用户偏好的推荐方法?

    当前我使用从返回的路径 typeof(MyLibrary).Assembly.Location 作为存储应用程序生成或需要的文件的默认位置。

    编辑: 我发现了两个相关/有趣的问题:

    这只是给像我这样从未使用过设置的人的一张便条。 app.config user.config settings.setting

    4 回复  |  直到 9 年前
        1
  •  71
  •   Sailing Judo    17 年前

    您可以很容易地使用应用程序设置。

    如果您以前没有这样做,只需右键单击项目并选择“属性”。选择“设置”选项卡。确保为作用域选择了“用户”(否则设置为只读)。

    forms.Width = Application1.Properties.Settings.Default.Width;
    

    如果需要保存,请执行以下操作:

    Application1.Properties.Settings.Default.Width = forms.Width;
    Application1.Properties.Settings.Default.Save();
    

    在上面的示例中,Width是在“设置”选项卡中定义的自定义设置名称,Application1是应用程序的命名空间。

    您提到要在设置中存储字典对象。正如您所发现的,您不能直接这样做,因为字典对象是不可序列化的。但是,您可以非常轻松地创建自己的可序列化字典。保罗·韦尔泽有一个很好的例子 on his blog .

    有充分的理由将数据存储在不同的位置。某些设置是应用程序设置,并且是只读的。这些是应用程序需要运行但不是特定于用户的设置(例如,应用程序资源的URI或税率)。这些存储在app.config中。

    用户设置存储在用户文档/设置文件夹深处的模糊目录中。默认设置存储在app.config中(我想,我一时想不起来),但任何用户更改都存储在他们的个人文件夹中。这意味着数据会随着用户的变化而变化。(我所说的“用户”是指Windows用户,而不是应用程序的用户。)

    希望这能为你澄清一些。这个系统实际上相当简单。一开始它可能看起来有点陌生,但使用几天后你就再也不用想它了。。。它只是工作。

        2
  •  27
  •   Nir    17 年前

    存储用户首选项的正确位置是(显然,用正确的名称替换MyCompanyName和MyApplicationName)

    在磁盘上:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"
    

    或在注册表中的注册表项下:

     HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName
    

    这些位置是针对每个用户的,它们与非管理员用户、使用同一台计算机的多个用户、快速用户切换、终端服务以及其他所有与您的软件交互的方式一起工作。

    如果您需要所有用户的公共位置,则:

    1. 它仅在用户以管理员身份运行时才起作用
    2. 你必须自己处理一切(就像两个用户通过快速用户切换在同一台计算机上同时运行应用程序一样)。

    地点如下:

    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"
    

    或在注册表中的注册表项下:

     HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName
    
        4
  •  1
  •   sth    16 年前

    以下似乎是最佳选择:

    Application.UserAppDataPath