保存用户首选项文件的建议位置是什么?是否有推荐的方法来处理用户偏好?
目前,我使用从typeof(MyLibrary).Assembly.Location
作为默认位置返回的路径来存储应用程序生成或要求的文件.
编辑:我发现了两个相关/有趣的问题:
保存Windows XP和Vista应用程序用户信息的最佳位置
实现保存/加载功能的方法是什么?
编辑#2:这只是像我这样以前从未使用过设置的人的笔记.设置是非常有用的,但我不得不做一大堆挖掘来弄清楚发生了什么(来自Python世界,而不是我使用的东西).事情变得复杂,因为我想保存字典,显然它们不能被序列化.设置似乎也存储在3个不同的文件中,具体取决于您的操作.还有一个app.config
,user.config
和settings.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用户,而不是您应用的用户.)
希望这对你有所澄清.该系统实际上非常简单.起初看起来有些异国情调,但经过几天的使用之后,你再也不会想到它......它只是有效.
您可以轻松地使用应用程序设置.
如果您尚未执行此操作,只需右键单击该项目并选择"属性".选择"设置"选项卡.确保为示波器选择"用户"(否则设置为只读).
访问它的代码很简单:
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
这些位置是针对每个用户的,他们与非管理员用户,使用同一台计算机的多个用户,快速用户切换,终端服务以及人们可以与您的软件交互的所有其他方式一起工作.
如果您需要所有用户的公共位置,那么:
它仅在用户以管理员身份运行时才有效
它无法在Vista上可靠地运行
您必须自己处理所有事情(例如,通过快速用户切换,同时在同一台计算机上运行应用程序的两个用户).
和位置是:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"
或者在密钥下的注册表中:
HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName