我正在开发一个小型的C#Winforms游戏,其中一件我想做的事就是保存应用程序特定的数据。但是,我正在努力了解应该存储的正确位置。
据我所知,应用程序可能存储了几种类型的数据,因此可以保存不同的地方:
1.应用程序属性 - 诸如应用程序存储数据的位置,最后登录用户的位置,默认窗口大小,位置等设置。此信息是假设进入app.settings,还是进入注册表?
2.全局应用程序数据 - 这可能包括在此计算机上运行应用程序的每个用户使用的精灵和其他游戏资产。这些常见数据将存储在何处?值得注意的是,在我的特定情况下,这些数据将不会提供默认安装,并且将允许用户添加他们自己的游戏资产,然后该资产应该可用于同一计算机上的任何其他用户。
3.用户特定的应用程序数据 - 这将包括用户保存的游戏文件,其特定的应用程序首选项及其配置文件信息。我应该在哪里存储这个?
理想情况下,我希望我的应用程序与Windows XP,Vista,7以及即将推出的Windows 8兼容 - 我不知道这是否会改变方法,但希望它能帮助提供建议。
这是我第一次涉足这种发展,我很欣赏一些“最佳实践”的建议。
问题2:
我建议在Environment.SpecialFolder.CommonAppData
中使用子文件夹(默认情况下映射到Windows7上的C:\ProgramData
)。这是一个隐藏文件夹。
问题3:
如果您希望用户不打算备份/修改这些文件,请将这些文件放入Environment.SpecialFolder.AppData
(默认映射到C:\Users\[USERNAME]\AppData\Roaming
,隐藏文件夹)。一些游戏还将他们的保存游戏放入Environment.SpecialFolder.MyDocuments
,可能是因为用户更容易在那里找到它们。
示例代码:
var directory = Environment.GetFolderPath(Environment.SpecialFolder.AppData);
using (FileStream fs = File.Create(Path.Combine(directory, "myAppDirectory", "myFile.txt")))
{
// write data
}
对于complete list of special folders on Windows,请点击链接
图片的标题说明
CommonAppData
目录的错误,并且在Windows 8 x64 CP中错误变得更加严重。我在博客上写了这篇文章:problems after moving CommonAppData directory on Windows 7 x64 and Windows 8 x64应用程序属性 - 您描述的大多数应用程序数据应该特定于每个用户并放入Environment.SpecialFolder.ApplicationData
(%appdata%
环境变量)。我通常会避免将数据放入注册表中,因为很难找到,编辑和修复。如果您不希望数据在漫游时与用户关联(可能文件很大或者某些方面连接到计算机),那么您可以将它放在Environement.SpecialFolder.LocalApplicationData
(`%localappdata%环境变量)中。
全局应用程序数据 - 我将全局应用程序数据放入Environment.SpecialFolder.CommonApplicationData
(%programdata%
环境变量)
用户特定的应用程序数据 - 与#1相同,除非用户很容易找到数据(例如保存的游戏),在这种情况下它应该进入Environment.SpecialFolder.MyDocuments
,它没有相关的环境变量。
正如yas4891指出的那样,你可以使用Environment.GetFolderPath()
之一使用Environment.SpecialFolder` values listed here可靠地获取这些文件夹路径。
为什么不将数据保存到对象并将其写入文件。为每种类型使用不同的文件。