首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF/C#:我应该在哪里保存用户首选项文件?

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

Stack Overflow用户
提问于 2008-12-28 14:51:37
回答 4查看 33.4K关注 0票数 56

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

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

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-28 15:04:06

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

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

访问它的代码很简单:

代码语言:javascript
复制
forms.Width = Application1.Properties.Settings.Default.Width;

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

代码语言:javascript
复制
Application1.Properties.Settings.Default.Width = forms.Width;
Application1.Properties.Settings.Default.Save();

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

编辑:回答更多问题

你提到你想在设置中存储Dictionary对象。正如您所发现的,您不能直接这样做,因为Dictionary对象是不可序列化的。但是,您可以很容易地创建自己的可序列化字典。Paul Welzer有一个很好的on his blog例子。

你有几个链接,这让情况有点混乱。您最初的问题是在哪里保存“用户首选项文件”。我非常确定微软在设置功能方面的意图就是……存储用户皮肤偏好、布局选择等。它并不意味着作为应用程序数据的通用存储库,尽管它很容易被滥用。

数据存储在不同的地方是有充分理由的。其中一些设置是应用程序设置,并且是只读的。这些是应用程序运行所需的设置,但不是特定于用户的(例如,应用程序资源的URI或可能的税率)。这些文件存储在app.config中。

用户设置存储在User Document/Settings文件夹深层的模糊处理目录中。默认设置存储在app.config中(我想,我已经想不起来了),但用户的任何更改都存储在他们的个人文件夹中。这是针对因用户而异的数据。(这里的“用户”指的是Windows用户,而不是应用程序的用户。)

希望这能为你澄清这一点。这个系统实际上非常简单。乍一看可能有点陌生,但使用几天后,你就再也不用去想它了……它就是这样的。

票数 72
EN

Stack Overflow用户

发布于 2008-12-28 15:55:48

当以非管理员身份运行或在Vista上运行时,您不能写入"Program files“文件夹(或其中的任何子文件夹)。

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

在磁盘上:

代码语言:javascript
复制
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"

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

代码语言:javascript
复制
 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

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

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

Vista

  • 只有当用户以administrator

  • It身份运行时它才能工作,而在Vista

  • 上运行不可靠您必须自己处理所有事情(就像两个用户通过快速的用户切换同时在同一台计算机上运行应用程序一样)。

位置是:

代码语言:javascript
复制
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"

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

代码语言:javascript
复制
 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName
票数 28
EN

Stack Overflow用户

发布于 2008-12-29 23:39:48

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

独立存储简介

http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

隔离类型

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/396229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档