如何使用Boost在$PATH中找到exe
How to find an exe in $PATH using Boost
我正在使用Boost库编写一个c++程序。我需要能够找到一个可执行文件的完整路径,只给名字。这将相当于Unix shell的which
实用程序,Windows的where
或Python的shutil.which
。
有办法做到这一点吗?当然,我可以通过遍历PATH环境变量来编写自己的代码,但是为了可移植性,我需要考虑在:
或;
上进行分割等问题,如果有预先编写的(并经过测试的!)例程,我更愿意使用它。
在boost中没有直接实现这个。你可以:
- 用
getenv()
读取PATH
的内容,使用Boost文件系统以可移植的方式处理路径,并手动处理多路径分割-似乎分割字符的数量可能不太疯狂,只是一些替代方案 - 调用shell现有的
which
程序(或其变体) - 调用一个简单的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.
}
}
这是一个没有问题的问题,它可能会更快,只是把它删除,然后试着找到一些库函数,在某个地方,做同样的事情。
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 终端不会为C++文件创建.exe文件吗
- 在Windows中以.exe的形式运行c++
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- Visual Studio mkl_link_tool.exe链接错误
- PrintWindow函数在notepad.exe中出错
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 获取当前正在运行的 exe 名称(不是路径)
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 1d.exe找不到SFML文件?
- VI工作室代码错误无法打开输出文件主.exe
- 如何为每个客户生成自定义 exe
- 使用参数在 C# 的C++上运行.exe
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 在服用 PATH C++后运行.exe
- 如何将 mciSendString("play path",0,0,0) 与 exe path 一起使用?
- 使用 QProcessEnvironment 更改 cmd.exe 的 PATH 环境变量
- Netbeans - 找不到 make.exe 、 "cygdrive/" 已预先添加到 PATH 中
- 如何使用Boost在$PATH中找到exe