Как мне перейти к предыдущей папке в пути? - PullRequest
1 голос
/ 07 апреля 2019

Как мне сказать программе искать папку в предыдущем каталоге?

Я пытался написать "../assets/fonts/DejaVuSans.ttf", но это не работает.

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

Моя папка активов находится не в текущем каталоге, а в предыдущем каталоге

1 Ответ

0 голосов
/ 10 апреля 2019

Короткая версия (я постараюсь расширить позже).

Библиотека, которую вы используете для SDF2_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 ().Если ноль, выведите строку, которую дает TTF_GetError ().Это должно помочь определить причину ошибки.

Если вы попробуете это решение и у вас возникнут проблемы, комментируя этот ответ.

Когда у меня появится возможность, я собираюсь выяснить, почемуФункция не принимает абсолют и, по крайней мере, пытается документировать ее как таковую, если она не исправлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...