簡體   English   中英

如何使用Boost在$ PATH中查找exe

[英]How to find an exe in $PATH using Boost

我正在使用Boost庫編寫C ++程序。 我需要能夠找到可執行文件的完整路徑,只給出名稱。 這相當於Unix shell的which實用程序,Windows where ,或Python的shutil.which

有辦法做到這一點嗎? 我當然可以編寫自己的,通過遍歷PATH環境變量,但為了便於攜帶,我需要考慮拆分的事情:; 等,如果有一個預先編寫(和測試!)例程,我寧願使用它。

沒有什么能直接在boost中實現這一點。 你可以:

  1. 使用getenv()讀取PATH內容,使用Boost文件系統以可移植的方式處理路徑,並手動處理多路徑分割 - 似乎分裂字符的數量可能是瘋狂的,只是幾個選擇
  2. 調用你的shell現有which程序(或其變體)
  3. 調用一個簡單的python程序調用shutil.which ,例如system("python -c \\"import shutil; shutil.which('ls');\\"")

“寫我自己的”是通常如何做到的。 雖然這可能是C中的一個熊,但是使用C ++及其豐富的std::string類,這變得毫無疑問。 甚至不需要Boost。 這將是介紹性C ++課程中典型的家庭作業:

std::string s=getenv("PATH");

const char sep=':';  // Or use ';', if you feel like it.

auto b=s.begin(), e=s.end();

while (b != e)
{
    if (*b == sep)
    {
        ++b;
        continue;
    }

    auto p=b;
    b=std::find(b, e, sep);

    auto check=std::string(p, b) + "/" + filename;

    if (access(filename.c_str(), X_OK) == 0)
    {
          // Found it. Insert code here.
    }
}

這是一個非問題,它可能會更快,只是敲出來,然后嘗試找到一些庫函數,在某處,做同樣的事情。

暫無
暫無

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

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