【问题标题】:C++ Cross-platform solution to finding a data directoryC++ 跨平台查找数据目录的解决方案
【发布时间】:2013-08-17 07:27:09
【问题描述】:

这是我的第一篇 stackoverflow 帖子。

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

我可以检查可执行文件所在的文件夹并查看那里,但据我了解,这是不好的做法,并且难以实现跨平台。我显然不能使用工作目录,因为游戏可以从 shell 脚本、命令行、其他进程等运行。我还可以在整个文件系统中搜索某个“标记”文件,也许是为了敏感表明这是游戏文件所在的位置,但认真吗?梳理文件系统并不是启动应用程序的好方法,并且存在多次安装、多个标记文件,甚至根本没有标记文件的两难境地,这会产生强迫用户坐下的不良结果在游戏搜索磁盘时经过漫长的等待,最终由于磁盘为空而无法启动。

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

【问题讨论】:

    标签: c++ linux windows file installation


    【解决方案1】:

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

    对于 Windows

    %APPDATA%\<YourGame>
    

    对于 Linux,我认为标准位置是

    ~/.local/share/<YourGame>
    

    【讨论】:

      【解决方案2】:

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

      getcwd()
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多