为什么当im在编辑器中使用.exe时,std::filesystem::current_path()会返回不同的变量



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

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

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

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

所以,它做它设计要做的事情,给出当前的工作目录:

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

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

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

如何解决此问题。因此,当从.exe文件中打开应用程序时,我无法自动加载资产

这里有一种方法:

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

最新更新