C++查找数据目录的跨平台解决方案

C++ Cross-platform solution to finding a data directory

本文关键字:跨平台 解决方案 数据目录 查找 C++      更新时间:2023-10-16

这是我的第一篇堆栈溢出帖子。

正在制作一个游戏,我需要一个目录来放置其资源,例如图像、声音和配置文件。(请注意,游戏需要能够修改自己的配置文件。我想我可以在 Linux 上使用/usr/share/mygame/C:/Program Files/MyGame/在 Windows 上使用,但问题出现了,因为游戏可能会也可能不会安装在这两个地方,以及出于开发目的。

我可以检查以找出可执行文件所在的文件夹并查看那里,但据我了解,这是一种不好的做法,很难跨平台实现。我显然无法使用工作目录,因为游戏可以从 shell 脚本、命令行、其他进程等运行。我还可以在整个文件系统中搜索,也许按照敏感性的顺序,寻找某个"标记"文件,表明这是游戏文件所在的位置,但认真的?梳理文件系统并不是启动应用程序的好方法,并且存在多个安装,多个标记文件甚至根本没有标记文件的困境,这将产生不良结果,即迫使用户在游戏搜索磁盘时等待很长时间,最终无法启动,因为它是空的。

所以,我放弃了!是时候直接咨询互联网这个问题了。我应该如何确定我的文件的存储位置?

由于您不想在游戏从 shell 脚本、命令行等运行时使用工作目录,因此您始终可以使用操作系统的相应用户文件夹。

对于窗户

%APPDATA%<YourGame>

对于 Linux,我相信标准位置是

~/.local/share/<YourGame>

我认为您可以将数据存储在项目目录中,当您想要获取数据的绝对路径时,您可以先使用以下方法获取项目的绝对工作目录:

getcwd()

并添加数据的相对路径,您将获得数据的绝对路径!

因此,您可以定义一个函数来设置项目环境并获取数据的绝对路径!