我有一个 C 程序,它使用与可执行文件位于同一目录中的一些资源。当我从随机工作目录(不是程序所在的目录)执行程序时,不会加载资源,因为我在代码中使用的相对路径不是可执行文件所在的路径。我怎样才能很好地解决这个问题?
问问题
2263 次
2 回答
3
将包含资源的目录的路径作为参数传递给程序,或者:
- 将进程的当前目录更改为该目录(
chdir()
在 Unix 和SetCurrentDirectory()
Windows 上),或 - 构建资源的绝对路径
如果是 Windows,正如对问题的评论所暗示的那样,您可以获得exe
using的路径GetModuleFileName()
,从中提取目录并避免向程序提供参数。然后列出的两个选项中的任何一个都将允许程序从任何地方执行并且仍然可以找到它的资源。
于 2012-09-18T16:56:16.033 回答
0
对于像我刚才所做的那样将来遇到这个老问题的任何人:
该程序(至少在 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;
}
于 2018-01-19T18:52:01.337 回答