存储我的应用程序特定数据的正确位置在哪里?

我正在开发一个小型的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 } 

有关Windows上特殊文件夹的完整列表,请单击链接

图片的标题说明

  • 允许用户在这些目录中移动,因此请确保使用上面提供的代码
  • Windows 7 x64中存在关于CommonAppData目录的错误,并且该错误在Windows 8 x64 CP中变得更加严重。 我在博客上写过这个问题 : 在Windows 7 x64和Windows 8 x64上移动CommonAppData目录后出现问题

为什么不将数据保存到对象并将其写入文件。 为每种类型使用不同的文件。