【问题标题】:Asset folder path for c++ program [windows]c++程序的资产文件夹路径[windows]
【发布时间】:2018-12-25 23:09:10
【问题描述】:

我的C++程序的Release版本的结构是

 | bin
 | | game.exe
 | content
 | | sprites
 | | | asset.png

在代码中,我将资源的路径传递为“../content/sprites/asset.png”,但程序找不到它。我做错了什么?

额外信息:我使用 SLD2 作为支持库。

【问题讨论】:

  • 程序运行时的当前目录不一定是包含二进制文件的目录。您可以通过GetModuleFileName (NULL) 获得此信息
  • 所以资产的路径应该是相对于二进制文件还是相对于 GetModuleFileName 的结果?
  • 您可以从调用GetModuleFileName的结果中派生出包含二进制文件的目录
  • 所以路径和我假设的一样,现在这个问题已经解决了 - 我如何将正确的路径传递给资产?
  • 一旦你有了包含你的二进制文件的目录的名字,你就可以附加你之前使用的相同的路径。

标签: c++ sld


【解决方案1】:

您依赖当前目录作为包含二进制文件的目录,但这并不总是正确的。相反,您可以这样做(为简洁起见,省略了错误和范围检查):

WCHAR buf = new WCHAR [32768];   // allow for long path names
GetModuleFileNameW (NULL, buf, 32768);
WCHAR sep = wcsrchr (buf, '\\');
wcscpy (sep + 1, L"..\\content\\sprites\\asset.png");
...
delete [] buf;

编辑:

如果您调用的代码取决于当前目录是包含二进制文件的目录,那么您可以在初始化代码中的某处执行此操作:

WCHAR buf = new WCHAR [32768];   // allow for long path names
GetModuleFileNameW (NULL, buf, 32768);
WCHAR sep = wcsrchr (buf, '\\');
*sep = 0;
SetCurrentDirectoryW (buf);
delete [] buf;

再次,为简洁起见,我省略了错误和范围检查。

【讨论】:

  • 嘿,感谢您的输入,但据我所知,从 .exe 使用时,SLD 的 IMG_Load 不适用于任何路径
  • 更新了我的答案
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2011-03-27
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多