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

时间:2012-05-12 11:04:34

标签: c# filesystems

我正在开发一个小型的C#Winforms游戏,我想要做的一件事就是保存应用程序特定的数据。但是,我正在努力了解应该存储的正确位置。

据我所知,应用程序可能存储了几种类型的数据,因此可以保存不同的地方:

1。应用程序属性 - 设置,例如应用程序存储数据的位置,最后登录用户的位置,默认窗口大小,位置等。此信息是假设进入app.settings,还是进入注册表?

2。全球应用数据 - 这可能包括在此计算机上运行应用程序的每个用户使用的精灵和其他游戏资产。这些常见数据将存储在何处?值得注意的是,在我的特定情况下,这些数据不会提供默认安装,用户将被允许添加他们自己的游戏资产,然后该资产应该可供同一台计算机上的任何其他用户使用。

第3。用户特定的应用程序数据 - 这将包括用户保存的游戏文件,他们的特定应用程序首选项和他们的个人资料信息。我应该在哪里存储这个?

理想情况下,我希望我的应用程序与Windows XP,Vista,7以及即将推出的Windows 8兼容 - 我不知道这是否会改变方法,但希望它能帮助提供建议。

这是我第一次涉足这种发展,我希望得到一些“最佳实践”建议。

3 个答案:

答案 0 :(得分:24)

问题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,请点击链接

SIDENOTES

答案 1 :(得分:0)

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

全局应用程序数据-我将全局应用程序数据放入Environment.SpecialFolder.CommonApplicationData%programdata%环境变量)

用户特定的应用程序数据-与#1相同,只不过当用户希望轻松找到该数据(例如保存的游戏)时,该数据应放在Environment.SpecialFolder.MyDocuments中,没有关联的环境变量。

正如yas4891所指出的,您可以使用Environment.SpecialFolder` values listed here之一使用Environment.GetFolderPath()可靠地获取这些文件夹路径。

答案 2 :(得分:-3)

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