保存用户首选项文件的推荐位置是什么?有没有推荐的方法来处理用户偏好?
目前,我使用从typeof(MyLibrary).Assembly.Location
返回的路径作为默认位置来存储应用程序生成或需要的文件。
编辑:我发现了两个相关/有趣的问题:
编辑#2:对于像我这样从未使用过设置的人来说,这只是一个注释。设置是非常有用的,但我不得不做大量的挖掘来弄清楚发生了什么(来自Python世界,而不是我也用过的东西)。事情变得复杂了,因为我想保存字典,显然它们不能被序列化。设置似乎也被存储在3个不同的文件中,这取决于你所做的事情。这里有一个app.config
、user.config
和一个settings.setting
文件。下面是我发现的另外两个有用的链接:
发布于 2008-12-28 15:04:06
您可以很容易地使用应用程序设置。
如果您以前没有这样做过,只需右键单击项目并选择Properties。选择设置选项卡。确保您为作用域选择了"User“(否则该设置为只读)。
访问它的代码很简单:
forms.Width = Application1.Properties.Settings.Default.Width;
如果需要保存,请执行以下操作:
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用户,而不是应用程序的用户。)
希望这能为你澄清这一点。这个系统实际上非常简单。乍一看可能有点陌生,但使用几天后,你就再也不用去想它了……它就是这样的。
发布于 2008-12-28 15:55:48
当以非管理员身份运行或在Vista上运行时,您不能写入"Program files“文件夹(或其中的任何子文件夹)。
存储用户首选项的正确位置是(显然,将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
发布于 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
https://stackoverflow.com/questions/396229
复制相似问题