gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:35 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

您正在使用 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() 调用的结果。如果为空,打印 TTF_GetError() 给你的字符串。这应该有助于确定错误所在。

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

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

关于c - 如何到达路径中的上一个文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55558836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com