为什么当我在编辑器中并使用 .exe

问题描述

我有我的项目,我在其中使用文件系统来检索资产目录。 当我在编辑器中使用我的程序时(我使用的是 Visual Studio 2019),一切都很好,这段代码返回了项目工作目录的值。

std::string currentPath = std::filesystem::current_path().string();

但是当我从 .exe 文件获取应用程序时,这行代码返回通向 .exe 文件的路径。 VS 中属性中名为 $TargetPath 的同一目录。 所以我的问题是为什么会发生这种情况,我该如何解决这个问题。因此,当从 .exe 文件中加载应用程序时,我无法自动加载资产

解决方法

因为它给出了当前工作目录,这是由调用您的程序的环境设置的(除非您的程序明确更改它)。

所以,它完成了它的设计,gives the current working directory

返回当前工作目录的绝对路径,

,

所以我的问题是为什么会发生这种情况

发生这种情况是因为您已将编辑器配置为将工作目录设置为一个路径,而您正在使用编辑器外的另一个工作目录运行程序。

我该如何解决这个问题。因为从 .exe 文件中加载应用程序时我无法自动加载资产

这是一种方法:

  • 将资产存储在相对于 exe 的路径中。
  • 获取 exe 的路径。
    • 在 POSIX 上,您可以从 argv[0] 的参数中使用 main
    • 在 Windows 上,documentation 推荐 GetModuleFileNameW
  • 获取该路径的规范绝对形式(如果 exe 的路径是相对的,请确保在此步骤之前工作目录未更改)。
  • 从该规范路径中获取包含 exe 的目录。
  • 将该目录路径与资产的相对路径连接起来以获得资产的绝对路径
  • 使用绝对路径加载资源。