2017-10-09 141 views
-2

當編譯器編譯代碼時,它會吐出一個可執行文件。 我想要做的是在運行時獲取該可執行文件的名稱。唯一的問題是我搜索的每個地方,我只能找到方法來抓取可執行文件的整個路徑。如何獲取C++中的可執行文件名?

如果我有一個名爲app.exe的可執行文件,我想在控制檯中輸出它。 人們在線說使用GetModuleFileName,GetModuleBaseNameargv[0],但所有這些給我的.exe的完整路徑,如C:\Users\Lone-PC\Desktop\app.exe,而不僅僅是app.exe

我不想使用任何庫,並且這些庫全部打包在Windows機器的控制檯應用程序中。

+2

如果你有完整的路徑,是什麼阻止你解析出文件名的代碼?你有更多的信息。 – HTNW

+1

你有'argv [0]',解析出來。你有什麼問題呢? –

+0

@HTNW解析是什麼意思? – Joseph

回答

0

我發現我想要感謝用戶HTNW。 我必須處理目錄,從argv[0]提到的方法。

所以我查了一下並借用了代碼,並創建了一個函數,它將返回字符串中的文件名。

這裏是解決我的問題

string getFileName(string path) { 
    string filename = path; 
    const size_t last_slash_idx = filename.find_last_of("\\/"); 
    if (std::string::npos != last_slash_idx) { 
     filename.erase(0, last_slash_idx + 1); 
    } 
    const size_t period_idx = filename.rfind('.'); 

    return filename; 
} 
+0

如果您需要可執行文件的真實名稱,使用'argv [0]'是不可靠的。它是從命令行解析的,並且當使用'CreateProcess'的'lpApplicationName'參數時,可以用任意命令行啓動一個程序。 – eryksun

相關問題