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

时间:2016-08-12 10:14:52

标签: c++ boost

我正在使用Boost库编写C ++程序。我需要能够找到可执行文件的完整路径,只给出名称。这相当于Unix shell的which实用程序,Windows' where或Python shutil.which

有没有办法做到这一点?我当然可以通过迭代PATH环境变量来编写自己的,但为了便于携带,我需要考虑拆分:;等等,如果有&#39这是一个预先编写(和测试!)的例行程序,我更喜欢使用它。

2 个答案:

答案 0 :(得分:0)

没有什么能直接在boost中实现这一点。你可以:

  1. 使用getenv()阅读PATH的内容,使用Boost File System以便携方式处理路径,并手动处理多路径分割 - 似乎不是数字分裂字符可能是疯狂的,只是一些选择
  2. invoke您的shell现有which程序(或其变体)
  3. 调用一个简单的python程序,调用shutil.which,例如system("python -c \"import shutil; shutil.which('ls');\"")

答案 1 :(得分:0)

"写我自己的"这是通常如何做到的。虽然这可能是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.
    }
}

这是一个非问题,它可能会更快地解决这个问题,然后尝试在某个地方找到一些库函数,它会做同样的事情。