2013-03-30 120 views
2

我试图通过​​函数从win32中的相对文件路径加载文件。我使用的URL绝对存在,用于测试目的,在资源文件中使用相同的URL作为添加的位图。使用LoadImage相对文件路径

Image = (HBITMAP)LoadImage(NULL, "..\\..\\Images\\Mage default.bmp", 
          IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); 

然而,它返回错误代码2,表示该文件不能被发现。我已经在一定程度上使用了这个问题,并且提到了MSDN,并且我找不到任何说明如何使用​​的相对文件路径的任何内容。

它似乎与LoadBitmap和一个预先定义的位图正常工作,但在这种情况下似乎不起作用。任何帮助将不胜感激

+0

在许多情况下不推荐反向相对寻址。它使程序员的管理路径复杂化。 – deepmax

+3

依靠正在设置的默认工作目录永远不会停止伤害。当它在正常安装位置的用户计算机上运行时,它就无法工作。没有c:\ program files \ images目录。从GetModuleFileName()生成绝对路径名,传递NULL以查找EXE的存储位置。 –

+0

@HansPassant好的,非常感谢。通过组合上面生成的相对路径和绝对路径,生成绝对文件路径应该很容易。 –

回答

2

首先,检查文件是否存在,以及当前目录是否是您所期望的。

此外,您可以使用像GetFullPathName这样的函数将相对路径转换为绝对路径。

+0

GetFullPathName在尝试获取绝对路径时返回错误的值 –

+0

我认为该错误不在GetFullPathName中。检查GetCurrentDirectory说什么。 –

+0

抱歉,对于迟到的回复,但经过一些修补GetFullPathName工作。非常感谢 –

1

你有相对路径计算基于你的进程/运行时工作目录,而不是在编译时你的静态文件位置。

+0

我知道它取决于当前的文件位置,但我以前检查过它,并且它位于正确的位置。为了确保这一点,我使用SetFileLocation()将文件位置重置为初始位置,通过函数开始处的GetFileLocation检索。 –

+0

你能通过GetWorkingDirectory()验证你的CWD是什么吗? –

+0

我似乎无法获取GetWorkingDirectory的工作,但GetCurrentDirectory返回正确的值 –