我有一个C程序,它使用与可执行文件位于同一目录中的一些资源。当我从随机工作目录(不是程序所在的目录)执行程序时,资源不会加载,因为我在代码中使用的相对路径不是可执行文件的路径。我怎样才能解决这个很好?C中的相对路径
Q
C中的相对路径
2
A
回答
3
传递一个包含资源的程序作为参数,无论是目录的路径:
- 变化进程的当前目录的目录(
chdir()
在Unix和SetCurrentDirectory()
在Windows上),或 - 结构绝对路径的资源
如果是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;
}
相关问题
- 1. C中的相对路径#
- 2. c#相对路径
- 3. C#Uri AppDomain.CurrentDomain.BaseDirectory相对路径
- 4. Visual Studio C++相对路径
- 5. 硬编码C中的相对路径#
- 6. 将相对路径转换为svg中的相对路径
- 7. 相对路径
- 8. 相对路径
- 9. 相对路径
- 10. 相对路径
- 11. 相对路径
- 12. 相对路径
- 13. 相对路径
- 14. server.mappath中的相对路径
- 15. codeigniter中的相对路径
- 16. Context.xml中的相对路径
- 17. PHP中的相对路径?
- 18. VB.Net中的相对路径
- 19. scrapyd中的相对路径
- 20. Eclipse中的相对路径
- 21. Python中的相对路径
- 22. Silverlight中的相对路径
- 23. Java中的相对路径
- 24. QtCreator中的相对路径
- 25. .NET中的相对路径
- 26. C++的#include的相对路径
- 27. 转换为相对路径C#绝对路径
- 28. 将相对路径转换为绝对路径C#
- 29. 从相对路径c获取绝对路径#
- 30. 如何将相对路径转换为绝对路径在C#
好,使用绝对路径? –
@KingsIndian:他怎么知道可执行文件最终会在哪里? Rsources是相对于exe文件夹,不是? –
那么,那肯定是一个答案,但然后用户不能改变到程序的目录,除非我用某种Windows API函数硬编码所有路径来检索实际的绝对路径... – Jori