42

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

据我所见,应用程序可能存储多种类型的数据,因此可以将其保存在不同的位置:

1. 应用程序属性 - 设置,例如应用程序存储数据的位置、上次登录的用户是谁、默认窗口大小、位置等。这些信息是否应该进入 app.settings,或者可能进入注册表?

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

3. 用户特定的应用程序数据 ——这将包括用户保存的游戏文件、他们的特定应用程序偏好和他们的个人资料信息。我应该在哪里存储这个?

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

这是我第一次尝试这种发展,我会很感激一些“最佳实践”的建议。

4

3 回答 3

40

问题2:
我建议在Environment.SpecialFolder.CommonAppData(默认映射到C:\ProgramDataWindows7)中使用子文件夹。这是一个隐藏文件夹。

问题 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 上特殊文件夹的完整列表,请点击链接

旁注

于 2012-05-12T11:13:08.230 回答
7

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

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

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

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

于 2019-01-20T21:15:25.223 回答
-8

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

于 2012-05-12T11:14:46.470 回答