将文件内容作为参数传递给C ++程序

时间:2018-02-06 21:26:48

标签: c++

使用C ++,需要将文件内容作为参数传递给程序,例如$ ./main <filename.txt$ echo the contents of the file | ./main

我希望能够以变量或其他方式访问文件的内容,以便我可以进一步操作。

我有这个基本的列表,包括我一直在尝试的一些东西。数据似乎不在argv中(我的运行总是告诉我,我有一个参数)。访问以这种方式传递的命令行参数的方法是什么?

#include <fstream>
#include <iostream>

int main(int argc, char **argv)
{
  std::cout << "Have " << argc << " arguments:" << std::endl;
  for (int i = 0; i < argc; ++i) {
    std::cout << argv[i] << std::endl;
  }
  std::istream* input = &std::cin; 
  if(argc > 1) {
    std::cout << input;
    std::cout << "more than argument found\n";
  }

  std::string inputs;
  std::cout<< "1:\n";
  std::cout<< argv[0];
  std::cout<< "\n2:\n";
  std::cout<< argv[1];
  std::cout<< "\n3:\n";
  std::cout<< input;

  std::cout<< "\nEnd\n";

  return 0;
}

修改

我也许并不完全清楚,因为这是一个相当基本的问题,但我没有意识到。基本上,使用$ ./main <filename.txt传递是不可协商的。用户RPGillespie的评论指出了我正确的方向。管道将其发送到stdin(我没有意识到)。因此,我想使用cin处理数据。最小的工作示例是

int main() {
  // read input
  for (std::string line; std::getline(std::cin, line);) {
    std::cout << line << std::endl;
  }

  return 0;
}

2 个答案:

答案 0 :(得分:4)

cat file | ./main会将文件内容传输到./main输入而不是参数。

如果要以这种方式管道参数,请使用xargs

cat file | xargs ./main

答案 1 :(得分:1)

虽然@liliscent有一个很好的解决方案,但以下也有效(我提到它是为了完整性,因为我觉得它更具可读性):

./main $(cat file)

这将获取名为file的文件的内容(因为它解释了$()内的命令),并将它们作为参数传递给./main。< / p>