-1

我的 C++ 程序的发布版本的结构是

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

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

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

4

1 回答 1

0

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

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;

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

于 2018-12-26T00:04:33.560 回答