慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

关于编程中“绝对路径”和“相对路径”的使用 铜牌收录

基本概念

加载图片、音乐等各种文件的时候,都要指定文件路径。通常,可以用绝对路径和相对路径两种方式来指定文件。

先解释一下概念:

  • 绝对路径,就是从盘符开始的路径,例如:“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 所在路径,再将图片等资源的相对路径修改为绝对路径再使用。

虽然使用相对路径并不是绝对可靠,但使用相对路径仍然是初学阶段比较推荐的做法。

添加评论