繁体   English   中英

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

[英]WPF/C#: Where should I be saving user preferences files?

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

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

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

编辑#2:这只是像我这样以前从未使用过设置的人的笔记。 设置非常有用,但我不得不做一大堆挖掘来弄清楚发生了什么(来自Python世界,而不是我使用的东西)。 事情变得复杂,因为我想保存字典,显然它们不能被序列化。 设置似乎也存储在3个不同的文件中,具体取决于您的操作。 有一个app.configuser.config和一个settings.setting文件。 所以这里有两个我觉得有用的链接:

您可以轻松地使用应用程序设置。

如果您尚未执行此操作,只需右键单击该项目并选择“属性”。 选择“设置”选项卡。 确保为示波器选择“用户”(否则设置为只读)。

访问它的代码很简单:

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

如果您需要保存它:

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

在上面的示例中,Width是您在Settings选项卡中定义的自定义设置名称,Application1是您的应用程序的Namespace。

编辑:回答进一步的问题

您提到要在“设置”中存储“字典”对象。 正如您所发现的那样,您无法直接执行此操作,因为Dictionary对象不可序列化。 但是,您可以非常轻松地创建自己的可序列化字典。 Paul Welzer 在他的博客上有一个很好的例子。

你有几个链接,这种情况有点混乱。 您的原始问题是保存“用户首选项文件”的位置。 我非常肯定微软打算使用“设置”功能就是......存储用户皮肤偏好,布局选择等等。它并不是应用程序数据的通用存储库,尽管它可能很容易被滥用。

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

用户设置存储在User Document / Settings文件夹深处的模糊目录中。 默认值存储在app.config中(我想,不能回想起我的头脑中的某些内容)但是任何用户更改都存储在他们的个人文件夹中。 这适用于从用户更改为用户的数据。 (“用户”是指Windows用户,而不是您应用的用户。)

希望这对你有所澄清。 该系统实际上非常简单。 起初看起来有些异国情调,但经过几天的使用之后,你再也不会想到它......它只是起作用。

当以非管理员或Vista运行时,您无法写入“程序文件”文件夹(或其任何子文件夹)。

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

在磁盘上:

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

或者在密钥下的注册表中:

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

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

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

  1. 它仅在用户以管理员身份运行时才有效
  2. 它无法在Vista上可靠地运行
  3. 您必须自己处理所有事情(例如,通过快速用户切换,同时在同一台计算机上运行应用程序的两个用户)。

和位置是:

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

或者在密钥下的注册表中:

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

您可以使用隔离存储。 您可以按用户,程序集和/或域进行隔离。

隔离存储介绍
http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

隔离类型
http://msdn.microsoft.com/en-us/library/eh5d60e1(VS.80).aspx

以下似乎是最好的选择:

Application.UserAppDataPath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM