如何通过终端输入使我完成的程序读取文件?

时间:2014-06-30 02:37:57

标签: c++ terminal command

这很傻但我已经完成了一个程序,它接受一个文件使用..但问题是我不知道如何在终端中指向它?我在macbook pro上,现在运行我输入的C ++程序

“g ++ FillMe.cpp -o main; ./main”

但是现在如何让我的FillMe程序实际读取文件?如何在终端命令中指向它?感谢。

有效的代码如下:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class Text {



string text;

public:

Text() {}

Text(const string& fname) {

    ifstream ifs(fname.c_str());

    string line;

    while (getline(ifs, line))

        text += line + '\n';

    }

    string contents() {

        return text;

    }

};

    int main(int argc, char* argv[]) {

        if (argc > 1)

        {

            Text t1;

            Text t2(argv[1]);

            cout << "t1 :\n" << t1.contents() << endl;

            cout << "t2 :\n" << t2.contents() << endl;

        }

    }

2 个答案:

答案 0 :(得分:0)

 $ g++ FillMe.cpp -o main 
 $ ./main
  

如何在终端命令中指向它?

您可以选择几个选项。

对于您的实际设置,您希望从程序命令行参数中查看文件名。因此,对于多个文件参数,您需要在循环中访问它们

    if (argc > 1) {
        for(int i = 1; i < argc; ++i) {
            Text txt(argv[i]);
            cout << "txt:\n" << txt.contents() << endl;
    }

并从命令行调用

$ ./main file1.txt file2.txt file3.txt

恕我直言更好,更灵活的解决方案是默认情况下让您的程序从标准输入读取。因此,您可以简单地使用shell的输入重定向功能,例如管道

$ cat file1.txt file2.txt file2.txt | ./main

提供./main的{​​{1}}输入流。

或者

std::cin

或其中一个选项documented here

但后者取决于您的使用案例。如果您需要处理来自已知单独文件的输入,最好使用$ ./main < myinputfile.txt 将名称作为程序参数传递。

答案 1 :(得分:-1)

./main可执行文件知道由于程序中的这一行而使用哪个cpp文件

Text t2(argv[1]);

所以当你输入

$ ./main input.txt

此行使用命令行'input.txt'中的参数1来构造新的Text对象。

这条线路正在施工:

  Text(const string& fname)

在这里,您将字符串名称传递给Text类,然后使用该文件名打开文件句柄