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

Mar*_*tin 24 c# filesystems

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

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

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

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

3.用户特定的应用程序数据 - 这将包括用户保存的游戏文件,其特定的应用程序首选项及其配置文件信息.我应该在哪里存储这个?

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

这是我第一次涉足这种发展,我很欣赏一些"最佳实践"的建议.

yas*_*891 25

问题2:
我建议使用子文件夹Environment.SpecialFolder.CommonAppData(C:\ProgramData默认情况下映射到Windows7).这是一个隐藏文件夹.

问题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               
}
Run Code Online (Sandbox Code Playgroud)

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

图片的标题说明


cdi*_*ins 7

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

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

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

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