我有一个项目,我正在使用文件系统检索资产目录。当我在编辑器中吃午饭时(我使用的是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
- 在POSIX上,可以从
- 获取该路径的规范绝对形式(如果exe的路径是相对的,请确保在此步骤之前工作目录没有更改(
- 从该规范路径获取包含exe的目录
- 将该目录路径与资产的相对路径连接,以获得资产的绝对路径
- 使用绝对路径加载资源