繁体   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