我需要将bash命令的输出逐行读取到字符串 vector 中。我使用ifstream尝试了此代码,但它给出了错误。我必须使用什么解析它们而不是ifstream?

using namespace std;

int main()
{
  vector<string> text_file;
  string cmd = "ls";

  FILE* stream=popen(cmd.c_str(), "r");
  ifstream ifs( stream );

  string temp;
  while(getline(ifs, temp))
     text_file.push_back(temp);
  for (int i=0; i<text_file.size(); i++)
      cout<<text_file[i]<<endl;
}

最佳答案

您不能将C I/O与C++ iostream设施一起使用。如果您确实要使用popen,则需要使用read访问其结果。

如果ls确实是您想要的,请给
Boost.Filesystem
尝试一下。

#include <boost/filesystem.hpp>
#include <vector>

int main()
{
  namespace bfs = boost::filesystem;
  bfs::directory_iterator it{bfs::path{"/tmp"}};
  for(bfs::directory_iterator it{bfs::path{"/tmp"}}; it != bfs::directory_iterator{}; ++it) {
    std::cout << *it << std::endl;
  }

  return 0;
}

关于c++ - 将命令行的输出逐行读取到c++中的字符串 vector 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12005481/

10-11 21:25