我的 C++ 程序的发布版本的结构是
| bin
| | game.exe
| content
| | sprites
| | | asset.png
在代码中,我将资产的路径作为“../content/sprites/asset.png”传递,但程序找不到它。我究竟做错了什么?
额外信息:我使用 SLD2 作为支持库。
您依赖当前目录作为包含二进制文件的目录,但这并不总是正确的。相反,您可以这样做(为简洁起见,省略了错误和范围检查):
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;
同样,为简洁起见,我省略了错误和范围检查。