在C ++中调用命令行程序

时间:2017-04-19 03:22:40

标签: c++ vector

我正在尝试编写一个帮助我编辑mp3文件标签的程序。我已经在python中创建了一个原型,但是在C ++中我遇到了调用cli程序的麻烦。

我所做的是将用户输入存储在向量中,我想将该向量发送到命令行。

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);

1 个答案:

答案 0 :(得分:0)

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());