2013-10-28 184 views
1

所以我正在尋找一段代碼,它允許我搜索它正在執行的文件的路徑。例如,我正在做一個自動運行程序用於pendrives(例如),但我不知道它是否會以D:,F:,G:或其他方式結束,程序會搜索它自己的路徑,並根據找到的路徑打開另一個文件,使用'if'語句。搜索.exe的路徑

這裏就是我想:

#include <stdlib.h> 
    #include <iostream> 
    using namespace std; 

    int main() { 
    // Insert 'search path' code and needed variables here. 

    if (-ThePath- == "d:\\AutoRun.exe") 
     { 
     system ("d:\\MyFolder\\OtherProgram.exe"); 
     } 
    else if (-ThePath- == "f:\\AutoRun.exe") 
     { 
     system ("f:\\MyFolder\\OtherProgram.exe"); 
     } 
    else if (-ThePath- == "g:\\AutoRun.exe") 
     { 
     system ("g:\\MyFolder\\OtherProgram.exe"); 
     } 
    else 
     { 
     cout << "An error ocurred.\n"; 
     cout << "Press enter to exit...\n"; 
     cin.get(); 
     }; 
    return 0; 
    } 

有一些方法可以這樣做?

+0

運行此示例,您將獲得一個驚喜:http://msdn.microsoft.com/en-us/library/17w5ykft.aspx –

+1

較新的Windows版本幾乎停止支持AutoRun。這太危險了,安全方面。 – MSalters

+0

@ MSalters - 絕對的AKA AutoMalware。 –

回答

8

GetModuleFileName:文檔here

編輯 - 佩德羅,來自微軟的示例代碼處理很多事情。要獲取文件路徑,您只需要:

TCHAR szPath[MAX_PATH]; 

if(!GetModuleFileName(NULL, szPath, MAX_PATH)) { 

    // handle error in GetModuleFileName 

} else { 

    // now, szPath contains file path 

}; 
+0

不錯的代碼,儘管對我來說看起來有點複雜。我仍然是初學者,大約半年來一直在研究C++。我會研究它,以提高自己:P感謝分享。 – PLPellegrini

+0

@PedroPellegrini:這是正確的答案,但。 WinAPI確實很煩人,特別是對於習慣於真正字符串的C++程序員。 – MSalters

+0

嗯,我明白了。謝謝,我會試試看。 – PLPellegrini

2

在標準C++ argv [0]中包含可執行文件的名稱。對於以正常方式調用的程序,這將成爲Windows上可執行文件的路徑。

+0

http://msdn.microsoft.com/en-us/library/17w5ykft.aspx –

+2

不,標準規定«*'argv [0]'應該是指向NTMBS的首字符的指針,它代表 名稱用於**調用程序或「」。*»(3.1.6-2)絕對不是完整路徑。 – syam

+0

確實如此,編輯得更準確。 – mattnewport