关于编程中“绝对路径”和“相对路径”的使用
2011-8-1 ~ 2021-9-19
(0)
基本概念
加载图片、音乐等各种文件的时候,都要指定文件路径。通常,可以用绝对路径和相对路径两种方式来指定文件。
先解释一下概念:
- 绝对路径,就是从盘符开始的路径,例如:“C:\Windows\system32\mfc42.dll”。
- 相对路径,就是从当前路径开始的路径,例如,当前路径是“C:\Windows”,那么指定前面范例的文件,可以直接写“system32\mfc42.dll”。
注意,路径分隔符“”在 C 语言里面是转义字符,所以表达路径分隔符需要用“\”。
从功能上讲:
- 访问每台电脑上路径都固定不变的文件,需要用绝对路径,例如访问 C:\Windows\system.ini。
- 如果程序所在路径不固定,访问的文件和程序放在一起,就要用相对路径。例如和程序放在一起的图片文件。
项目范例
以下用 VC2010 的项目来说明绝对路径和相对路径如何使用。
项目路径及主要文件如下:
C:\MyProjects\easyx\test\
├ Debug\
│ └ test.exe
├ Release\
│ └ test.exe
├ res\
│ └ apple.jpg
├ background.jpg
├ test.cpp
├ test.vcxproj
└ test.sln
绝对路径的使用:
#include <graphics.h>
#include <conio.h>
int main()
{
// 初始化绘图窗口
initgraph(640, 480);
// 加载图片到窗口
loadimage(NULL, _T("c:\\myprojects\\easyx\\test\\background.jpg"));
// 加载图片到 img 对象并显示
IMAGE img;
loadimage(&img, _T("c:\\myprojects\\easyx\\test\\res\\apple.jpg"));
putimage(100, 100, &img);
// 按任意键退出
_getch();
closegraph();
return 0;
}
对于这个范例,使用绝对路径编译后,无论 exe 程序放在哪里,图片路径都必须在“C:\MyProjects\easyx\test\background.jpg”和“C:\MyProjects\easyx\test\res\apple.jpg”。
对于相对路径的使用要注意:当前路径是项目路径,而不是 Debug 或 Release 路径。所以,图片要放在项目文件夹下,而不是 Debug 或 Release 文件夹里面。使用范例如下:
#include <graphics.h>
#include <conio.h>
int main()
{
// 初始化绘图窗口
initgraph(640, 480);
// 加载图片到窗口
loadimage(NULL, _T("background.jpg"));
// 加载图片到 img 对象并显示
IMAGE img;
loadimage(&img, _T("res\\apple.jpg"));
putimage(100, 100, &img);
// 按任意键退出
_getch();
closegraph();
return 0;
}
对于这个范例,使用相对路径编译后,图片只需要和 exe 程序放在一起就可以。例如程序放在“F:\Games\MyGame\test.exe”,那么两个图片的路径就是“F:\Games\MyGame\background.jpg”和“F:\Games\MyGame\res\apple.jpg”。
额外注意事项
对于相对路径,是以当前路径开始,当前路径通常是 exe 程序所在路径。但有例外,比如,在 VC2010 中运行的编译后的 exe 程序,当前路径是当前项目所在路径。另外,在 exe 的快捷方式里面可以修改当前路径。
对于种种不确定性,有些程序会先获取 exe 所在的绝对路径,然后通过字符串操作,获取 exe 所在路径,再将图片等资源的相对路径修改为绝对路径再使用。
虽然使用相对路径并不是绝对可靠,但使用相对路径仍然是初学阶段比较推荐的做法。
添加评论
取消回复