簡體   English   中英

獲取運行文件名:argv [0] vs boost :: filesystem :: current_path()

[英]Get the running file name: argv[0] vs boost::filesystem::current_path()

我正在嘗試獲取C ++中當前正在運行的文件名。 我編寫了一個簡單的代碼,同時使用了argv [0]和boost current_path()方法。 該文件被編譯為可執行文件mainWindow。

#include "boost/filesystem.hpp"

int main(int argc, char* argv[])
{
    boost::filesystem::path full_path( boost::filesystem::current_path() );
    std::cout << full_path.string() << "\n";

    std::cout << argv[0] << "\n\n";

    return 0;
} 

有趣的是,每種方法的輸出都是不同的。

argv [0]輸出為:

../VENTOS/src/loggingWindow/mainWindow

current_path()輸出為:

/ home / mani / Desktop / VENTOS_Redpine

我不是直接從終端運行程序(mainWindow)。 另一個應用程序正在調用我的程序,我想這就是輸出不同的原因。 我說得對嗎?

我的第二個問題是:不使用argv [0]選項,而僅依靠boost文件系統方法,我如何獲得與argv [0]相同的結果?

argv[0]僅包含用於執行程序的命令。 這可能包含路徑。 它可能包含相對路徑。 它可能根本不包含任何路徑。 由於符號鏈接等原因,它甚至可能不包含可執行文件的名稱。...如果托管系統選擇不提供任何內容,則它甚至可能為空。 它不可信任,因此您不想將其用作評估其他方法的基礎。

boost::filesystem::current_path您失敗,因為它僅返回當前工作目錄。 這可能是可執行文件的位置,也可能不是,因為它取決於運行程序的目錄以及該程序是否更改了工作目錄。 坦白地說,我不確定是否存在從Boost獲取進程名稱和路徑的可靠方法。 沒有幾年,但是時間在前進,你知道嗎?

有很多問題涉及如何獲取可執行文件和路徑( 在沒有/ proc / self / exe的情況下查找當前可執行文件的路徑看起來很有希望,但過時了。那時候又在前進。)但是所有這些都是特定於平台的,您可能必須做一些ifdef或鏈接器向導可以使它起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM