如何到达路径中的上一个文件夹?

时间:2019-04-07 12:05:44

标签: c

如何告诉程序在先前目录中查找文件夹?

我尝试编写“ ../assets/fonts/DejaVuSans.ttf”,但这是行不通的。

font = TTF_OpenFont ( "assets/fonts/DejaVuSans.ttf", 24 );

我的资产文件夹不在当前目录中,而是在先前目录中

1 个答案:

答案 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()给您的字符串。这应该有助于确定错误在哪里。

如果您尝试此解决方案,并且遇到问题,请对此答案发表评论。

当我有机会的时候,我将研究为什么这个函数不能采用绝对值,并且至少尝试将其记录为非固定值。