我需要一个明确的目录列表,每个平台一个或多个,用于存放游戏保存文件和其他游戏生成数据的目录。要么基于OS开发人员规范,要么因为没有建议,这是常见用法。
请为每个平台提供一个答案,并提供不同的目录。另外,最好的示例是如何在C ++或C中获取目录位置,因为这是您将遇到的更多困难的语言。
地点:
- 玩家的游戏数据(保存的游戏,配置)。
- 共享的游戏数据(例如所有计算机用户的高分或配置)。
- 临时游戏数据(又名缓存目录)。
我需要一个明确的目录列表,每个平台一个或多个,用于存放游戏保存文件和其他游戏生成数据的目录。要么基于OS开发人员规范,要么因为没有建议,这是常见用法。
请为每个平台提供一个答案,并提供不同的目录。另外,最好的示例是如何在C ++或C中获取目录位置,因为这是您将遇到的更多困难的语言。
地点:
Answers:
基于:
这些位置假定Windows安装在C:磁盘上。在您自己的目录中附加游戏名称或游戏公司,然后在这些目录中添加游戏名称。
如果使用Window 8 Metro风格的应用程序,则必须使用特定的API而不是尝试访问目录。读:
Windows Vista及以下版本:
C:\ Users \ {用户名} \ AppData \ Roaming
Windows XP:
C:\ Documents and Settings \ {用户名} \ Application Data
您可以通过获取APPDATA
环境变量来自动获取正确的用户名相关地址。
标准C(所有编译器):
char* appdata = getenv("APPDATA");
Visual Studio 20xx(避免getenv()警告说这不安全)-非Metro风格:
char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "APPDATA" );
Boost用户:目前,我编写的boost.filesystem(这也是向下一个C ++标准提议的文件系统库的草案)还没有实现提供正确目录的功能。但是,以前对此已有讨论。如果发生变化,请随时更新此部分。
Windows Vista及以下版本:
C:\ ProgramData
Windows XP:
C:\ Documents and Settings \所有用户
您可以通过获取PROGRAMDATA
环境变量来自动获取正确的地址。
标准C(所有编译器):
char* appdata = getenv("PROGRAMDATA");
Visual Studio 20xx(避免getenv()警告说这不安全)-非Metro风格:
char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "PROGRAMDATA" );
Boost用户:目前,我编写的boost.filesystem(这也是向下一个C ++标准提议的文件系统库的草案)还没有实现提供正确目录的功能。但是,以前对此已有讨论。如果发生变化,请随时更新此部分。
Windows Vista及以下版本:
C:\ ProgramData
Windows XP:
C:\ Documents and Settings \ {用户名} \ Local Settings \ Temp
您可以通过获取TEMP
环境变量来自动获取正确的地址。
C ++ Boost用户:为此,有一个简单的跨平台boost.filesystem函数
namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional
标准C(所有编译器):
char* appdata = getenv("TEMP");
Visual Studio 20xx(避免getenv()警告说这不安全)-非Metro风格:
char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "TEMP" );
基于:
在基于unix的OS中,该~
目录自动位于用户特定数据所在的用户主目录中。这意味着无论使用哪种语言,在这些平台上,您都可以使用~
而不是使用特定于OS的功能来自动访问此文件夹。还要注意,这/
是整个系统的根路径,而不是主磁盘根的路径。
在您自己的目录中附加游戏名称或游戏公司,然后在这些目录中添加游戏名称。
Apple的准则是在此处找到保存和配置文件,以使它们自动保存在云中(如果可用):
〜/文件
但是,更好的做法(也是更经常使用的做法)将这些文件定位在:
〜/图书馆/应用程序支持/
只是知道在这种情况下,文件不会自动保存到云中。如果您希望玩家选择,请使用平台的API进行选择。
/图书馆/应用程序支持
请注意,这里没有~
,它不是相对于用户的家,而是相对于系统的根。
如果在两次执行之间不需要保留数据:
/ tmp
如果需要在两次执行之间保留数据;
/库/缓存(对于MacOSX)
C ++ Boost用户:为此,有一个简单的跨平台boost.filesystem函数
namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional
~/Documents
。那是供用户选择组织;您绝对不应写入Documents中的固定路径。您的游戏~/Library/Application Support/Your App Name/
应用于保存和其他用户数据。
基于:
在基于unix的OS中,〜目录自动位于用户特定数据所在的用户主目录中。这意味着无论使用哪种语言,在这些平台上,您都可以使用〜而不是使用特定于OS的功能来自动访问此文件夹。另请注意,/是整个系统的根路径,而不是主磁盘根的路径。
在您自己的目录中附加游戏名称或游戏公司,然后在这些目录中添加游戏名称。
传统上,对于游戏Aquaria,它将是:
〜/。水族箱
请注意,.
默认情况下,用户将隐藏以开头的目录和文件。
$ XDG_CONFIG_HOME /水族馆
要么
$ XDG_DATA_HOME /水族馆
进行配置和保存游戏。
如果$XDG_CONFIG_HOME
未设置,请使用:
〜/ .config /水族馆
要么
〜/ .local / aquaria
这主要是为了整理用户的主目录,并在必要时允许用户运行应用程序的多个配置文件。规范中还有其他专用的用户特定目录。
/ var / games /
共享的配置文件应位于
/ etc / games /
/ tmp