2013-03-30 118 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返回正確的值 –