当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《WPF/C#:我应该在哪里保存用户首选项文件?》经验,为你挑选了2个好方法。

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

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

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

保存Windows XP和Vista应用程序用户信息的最佳位置

实现保存/加载功能的方法是什么?

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

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ddeaca86-a093-4997-82c9-01bc0c630138

http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/efe370dc-f933-4e55-adf7-3cd8063949b0/

Sailing Judo.. 70

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

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

访问它的代码很简单:

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用户,而不是您应用的用户.)

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



1> Sailing Judo..:

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

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

访问它的代码很简单:

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用户,而不是您应用的用户.)

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



2> Nir..:

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

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

在磁盘上:

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

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

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

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

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

    它仅在用户以管理员身份运行时才有效

    它无法在Vista上可靠地运行

    您必须自己处理所有事情(例如,通过快速用户切换,同时在同一台计算机上运行应用程序的两个用户).

和位置是:

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

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

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有