c - 如何进入路径中的上一个文件夹?
问题描述
如何告诉程序在上一个目录中查找文件夹?
我试过写“../assets/fonts/DejaVuSans.ttf”,但这不起作用。
font = TTF_OpenFont ( "assets/fonts/DejaVuSans.ttf", 24 );
我的资产文件夹不在当前目录中,而是在上一个目录中
解决方案
短版(稍后我会尝试扩展)。
您正在使用 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() 为您提供的字符串。这应该有助于确定错误在哪里。
如果您尝试此解决方案并有问题通过评论此答案来响应。
当我有机会时,我将研究为什么这个函数不需要绝对值,如果没有修复,至少尝试将它记录下来。
推荐阅读
- html - 如何在引导程序中使垂直和水平对齐响应图像
- python - GPIO 音乐盒树莓派按钮按下延迟
- reactjs - 在 ASP.NET Core 项目中对 React 组件进行单元测试
- python - python中的Language_check继承错误
- c# - 是否可以在 Xamarin Forms Android 中动态更改选项卡栏所选项目的颜色?
- swift - 监听器停止和启动时的 Firestore 定价
- react-native - 无法从自定义标题切换堆栈导航器中的抽屉
- node.js - 在无服务器中启用 cors?
- javascript - 如何使用新的 MediaStream API 获取音频 FFT?
- javascript - ElementUI - 如何自动换行:el-table-column 中的断词