首页 > 解决方案 > 如何进入路径中的上一个文件夹?

问题描述

如何告诉程序在上一个目录中查找文件夹?

我试过写“../assets/fonts/DejaVuSans.ttf”,但这不起作用。

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

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

标签: c

解决方案


短版(稍后我会尝试扩展)。

您正在使用 SDL2_ttf 的 TTF_OpenFont 的库需要绝对路径,而不是相对路径。这很奇怪,因为几乎在其他任何地方,打开都会采用相对路径(“../assets/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() 为您提供的字符串。这应该有助于确定错误在哪里。

如果您尝试此解决方案并有问题通过评论此答案来响应。

当我有机会时,我将研究为什么这个函数不需要绝对值,如果没有修复,至少尝试将它记录下来。


推荐阅读