2012-09-18 108 views
2

我有一个C程序,它使用与可执行文件位于同一目录中的一些资源。当我从随机工作目录(不是程序所在的目录)执行程序时,资源不会加载,因为我在代码中使用的相对路径不是可执行文件的路径。我怎样才能解决这个很好?C中的相对路径

+0

好,使用绝对路径? –

+1

@KingsIndian:他怎么知道可执行文件最终会在哪里? Rsources是相对于exe文件夹,不是? –

+0

那么,那肯定是一个答案,但然后用户不能改变到程序的目录,除非我用某种Windows API函数硬编码所有路径来检索实际的绝对路径... – Jori

回答

3

传递一个包含资源的程序作为参数,无论是目录的路径:


如果是Windows,关于这一问题的sugges评论您可以使用GetModuleFileName()获得exe的路径,从中提取目录并避免必须为程序提供参数。然后列出的两个选项中的任何一个都将允许程序从任何地方执行并仍然定位它的资源。

0

对于任何人在未来已在此老问题发生,我只是做了:

程序(至少在Linux上)保持它被称为通过为int main参数列表中的第一个参数的命令。

例如 在这个例子中,我们将钻取几个目录以获得我们的程序,导致以下调用命令[email protected]:~$ ./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; 
}