我正在开发一个小C#的WinForms游戏和我想要做的事情之一就是保存应用程序特定的数据。 不过,我挣扎了一下,了解正确的位置本应存放。
至于我可以看到有几种类型的应用程序可以存储数据,因此不同的地方为它举行:
1.应用程序属性 -设置,如在应用程序存储其数据,谁最后登录的用户是,默认的窗口大小,位置等。这个信息想进入app.settings,或者是进入注册表?
2.全球应用程序数据 -这可能包括精灵和由运行在本机上应用程序的所有用户使用其它的游戏资源。 凡将这个共同的数据储存在哪里? 值得一提的是,在我的特殊情况下,该数据将不会提供一个默认的安装和用户将被允许这应该是再提供自己的游戏资源添加到任何其他用户在同一台计算机上。
3.用户特定应用程序的数据 -这将包括用户保存的游戏文件,其具体应用的喜好和他们的个人资料信息。 我应该在哪里进行存储呢?
理想我想我的应用程序与Windows XP,Vista中,7兼容,当然还有即将推出的Windows 8 - 我不知道这改变了方法,但希望这将帮助提供建议。
这是我第一次进入这种发展,我希望得到一些“最佳实践”的建议。
问题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
}
对于Windows上的特殊文件夹的完整列表,按照链接
图片的标题说明
- 允许用户围绕这些目录中移动,所以一定要确保你使用上面提供的代码
- 有在Windows 7 64位系统有关的错误
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`值 。
你为什么不将数据保存到一个对象,并将其写入文件。 使用不同的文件为每种类型。