如何告诉程序在先前目录中查找文件夹?
我尝试编写“ ../assets/fonts/DejaVuSans.ttf”,但这是行不通的。
font = TTF_OpenFont ( "assets/fonts/DejaVuSans.ttf", 24 );
我的资产文件夹不在当前目录中,而是在先前目录中
答案 0 :(得分:0)
简短版本(我稍后会尝试扩展)。
您正在使用SDL2_ttf的TTF_OpenFont的库需要一个绝对路径,而不是相对路径。这很奇怪,因为打开的几乎所有其他地方都会采用相对路径(“ ../assests/fonts/DejeVuSans.ttf”)而不是绝对路径(“ /home/me/Project/SDL2_thing/assets/fonts/DejeVuSans.ttf ”)。
假定您的程序在“ / home / me / Project / SDL2_thing / source / my_program”目录中运行。要获取父目录(SDL2_thing)并构建绝对路径,此代码段应该可以工作(基于POSIX函数以及缓冲区大小有点草率):
#include <stdio.h> //printf
#include <unistd.h> //getcwd
#include <libgen.h> //dirname
int main() {
char buffer[1024];
char target[2048];
//get the full path to the current working directory
getcwd(buffer, 1024);
printf("cwd\t: %s \n", buffer);
// This will chop off the directory at the end of the path (doing ../source) effectively)
dirname(buffer);
printf("parent\t: %s \n", buffer);
//Take the path we have ".../SDL2_thing" and build a string appending the rest
sprintf(target, "%s/assets/fonts/DejeVuSans.ttf", buffer);
printf("target\t: %s \n", target);
return 0;
}
这是一个完整的程序,您可以轻松编译并运行以查看中间值的输出。再次,我只是在几个大的缓冲区周围乱扔,应该避免。使用适当的MAX_PATH常量等。您应该能够对此进行调整,以获取字体的绝对路径并指定给TTF_OpenFont()。
检查TTF_OpenFont()调用的结果。如果为null,则输出TTF_GetError()给您的字符串。这应该有助于确定错误在哪里。
如果您尝试此解决方案,并且遇到问题,请对此答案发表评论。
当我有机会的时候,我将研究为什么这个函数不能采用绝对值,并且至少尝试将其记录为非固定值。