我正在使用Boost库编写C ++程序。我需要能够找到可执行文件的完整路径,只给出名称。这相当于Unix shell的which
实用程序,Windows' where
或Python shutil.which
。
有没有办法做到这一点?我当然可以通过迭代PATH环境变量来编写自己的,但为了便于携带,我需要考虑拆分:
或;
等等,如果有&#39这是一个预先编写(和测试!)的例行程序,我更喜欢使用它。
答案 0 :(得分:0)
没有什么能直接在boost中实现这一点。你可以:
getenv()
阅读PATH
的内容,使用Boost File System以便携方式处理路径,并手动处理多路径分割 - 似乎不是数字分裂字符可能是疯狂的,只是一些选择which
程序(或其变体)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.
}
}
这是一个非问题,它可能会更快地解决这个问题,然后尝试在某个地方找到一些库函数,它会做同样的事情。