为什么在编辑器中使用 .exe 时 std::filesystem::current_path() returns 不同的变量

why std::filesystem::current_path() returns different variables when im in editor and using .exe

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

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

但是当我从 .exe 文件加载应用程序时,这行代码 returns 路径导致 .exe 文件。 在 VS 的属性中称为 $TargetPath 的同一目录。 所以我的问题是为什么会发生这种情况以及我如何解决这个 problem.Becouse 从 .exe 文件

启动应用程序时我无法自动加载资产的问题

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

所以,它按照设计的目的工作,gives the current working directory:

Returns the absolute path of the current working directory,

So my question is why is that happening

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

how can i resolve this problem.Becouse of that i cannot automatically load assets when lounching app from .exe file

这里有一个方法:

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