我有一个C程序,它使用与可执行文件位于同一目录中的一些资源。当我从随机工作目录(而不是程序所在的目录)执行程序时,资源不会加载,因为我在代码中使用的相对路径不是可执行文件所在的路径。我怎么能很好地解决这个问题?
将包含资源的目录的路径作为参数传递给程序,并且:
chdir()
和Windows上的SetCurrentDirectory()
),或者如果它是Windows,正如问题的评论所示,您可以使用exe
获取GetModuleFileName()
的路径,从中提取目录并避免必须为程序提供参数。然后列出的两个选项中的任何一个都允许程序从任何地方执行并仍然可以找到它的资源。
对于像我刚才那样在未来发生这个老问题的人:
该程序(至少在linux中)将它被调用的命令保存为int main
参数列表的第一个参数。
例如在这个例子中,我们将深入了解几个目录以进入我们的程序,从而产生以下调用命令user@PC:~$ ./foo/bar/awesome_program.x86_64
。
该程序(下面的代码)将打印./foo/bar/awesome_program.x86_64
。
由于我们将该字符串作为变量,因此从它构造相对路径应该相当简单,只用相对于可执行文件的路径替换该字符串的末尾。
工作代码:
#include <stdio.h>
int main (int argc, char **argv)
{
printf("calling path: %s\n", argv[0]);
return 0;
}