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

本文关键字:位置 在哪里 数据 应用程序 存储 | 更新日期: 2023-09-27 18:34:01

我正在开发一个小型的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目录后的问题

应用程序属性 - 您描述的大多数应用程序数据应特定于每个用户并放入Environment.SpecialFolder.ApplicationData(%appdata%环境变量(。我通常会避免将数据放入注册表中,因为它很难找到、编辑和修复。如果您不希望数据在用户漫游时与用户关联(可能文件很大或以某种方式连接到计算机(,则可以将其放入Environement.SpecialFolder.LocalApplicationData('%localappdata% 环境变量(。

全局应用程序数据 - 我会将全局应用程序数据放在Environment.SpecialFolder.CommonApplicationData(%programdata%环境变量(中

用户特定的应用程序数据 - 与#1相同,除非数据旨在被用户轻松找到(例如保存的游戏(,在这种情况下,它应该进入Environment.SpecialFolder.MyDocuments,它没有关联的环境变量。

正如 yas4891 指出的那样,您可以使用Environment.GetFolderPath()此处列出的 Environment.SpecialFolder 值之一可靠地获取这些文件夹路径。