在C++中调用命令行程序
问题描述:
我正在尝试编写一个程序,帮助我编辑mp3文件的标签。我在python中创建了一个原型,但在C++中,我遇到了调用cli程序的麻烦。在C++中调用命令行程序
我所做的是将用户输入存储在一个向量中,并且我想将该向量发送到命令行。
vector<string> cmd;
cmd.push_back("id3v2");
cmd.push_back("-a " + artist);
cmd.push_back("-t " + trackTitle);
cmd.push_back("-A " + albumTitle);
cmd.push_back("-T " + trackNum);
system(cmd);
答
system()
期望单个char*
串作为输入。您需要将您的std::vector
子串连接到一个空格分隔的std::string
中,然后将其c_str()
方法的返回值传递给system()
。
std::string join(const std::vector<std::string> &vec, char delim = ' ')
{
std::ostringstream oss;
if (!vec.empty())
{
oss << vec[0];
for(size_t idx = 1; idx < vec.size(); ++idx)
oss << delim << vec[idx];
}
return oss.str();
}
...
std::vector<std::string> cmd;
cmd.push_back("id3v2");
cmd.push_back("-a " + artist);
cmd.push_back("-t " + trackTitle);
cmd.push_back("-A " + albumTitle);
cmd.push_back("-T " + trackNum);
system(join(cmd).c_str());
或者:
std::ostringstream cmd;
cmd << "id3v2";
cmd << " -a " << artist;
cmd << " -t " << trackTitle;
cmd << " -A " << albumTitle;
cmd << " -T " << trackNum;
system(cmd.str().c_str());
您可能需要阅读[一个'的std :: system'参考](http://en.cppreference.com/w/cpp/utility/program/system )? –
感谢您的建议。我仍然在努力学习,但很多这些仍然没有意义。 – tj2jz