2012-09-18 104 views
2

我有一個C程序,它使用與可執行文件位於同一目錄中的一些資源。當我從隨機工作目錄(不是程序所在的目錄)執行程序時,資源不會加載,因爲我在代碼中使用的相對路徑不是可執行文件的路徑。我怎樣才能解決這個很好?C中的相對路徑

+0

好,使用絕對路徑? –

+1

@KingsIndian:他怎麼知道可執行文件最終會在哪裏? Rsources是相對於exe文件夾,不是? –

+0

那麼,那肯定是一個答案,但然後用戶不能改變到程序的目錄,除非我用某種Windows API函數硬編碼所有路徑來檢索實際的絕對路徑... – Jori

回答

3

傳遞一個包含資源的程序作爲參數,無論是目錄的路徑:


如果是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; 
}