C++查找数据目录的跨平台解决方案
C++ Cross-platform solution to finding a data directory
这是我的第一篇堆栈溢出帖子。
我正在制作一个游戏,我需要一个目录来放置其资源,例如图像、声音和配置文件。(请注意,游戏需要能够修改自己的配置文件。我想我可以在 Linux 上使用/usr/share/mygame/
,C:/Program Files/MyGame/
在 Windows 上使用,但问题出现了,因为游戏可能会也可能不会安装在这两个地方,以及出于开发目的。
我可以检查以找出可执行文件所在的文件夹并查看那里,但据我了解,这是一种不好的做法,很难跨平台实现。我显然无法使用工作目录,因为游戏可以从 shell 脚本、命令行、其他进程等运行。我还可以在整个文件系统中搜索,也许按照敏感性的顺序,寻找某个"标记"文件,表明这是游戏文件所在的位置,但认真的?梳理文件系统并不是启动应用程序的好方法,并且存在多个安装,多个标记文件甚至根本没有标记文件的困境,这将产生不良结果,即迫使用户在游戏搜索磁盘时等待很长时间,最终无法启动,因为它是空的。
所以,我放弃了!是时候直接咨询互联网这个问题了。我应该如何确定我的文件的存储位置?
由于您不想在游戏从 shell 脚本、命令行等运行时使用工作目录,因此您始终可以使用操作系统的相应用户文件夹。
对于窗户
%APPDATA%<YourGame>
对于 Linux,我相信标准位置是
~/.local/share/<YourGame>
我认为您可以将数据存储在项目目录中,当您想要获取数据的绝对路径时,您可以先使用以下方法获取项目的绝对工作目录:
getcwd()
并添加数据的相对路径,您将获得数据的绝对路径!
因此,您可以定义一个函数来设置项目环境并获取数据的绝对路径!
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 是GTK 3.x真正的跨平台解决方案
- C++查找数据目录的跨平台解决方案
- QT是我的跨平台应用程序的正确解决方案吗?
- 在c++中绘制(原语,线条等)的最佳通用跨平台解决方案
- c++中是否有跨平台的解决方案来创建一个独特的进程?