从命令行C发送文本文件名

时间:2018-11-06 08:16:38

标签: c++ file c++11 command-line

我想以两种方式运行代码并发送文件

  1. myprogram < input.txtcat input.txt | myprogram
  2. myprogram input.txt

我已经找到了使用argcargv[]的第二种方式,但是我无法弄清楚如何为第一个选项编写代码。

int main (int argc, char *argv[])
{
     ifstream fin;
     if(argc > 1){

        fin.open (argv[1]);
     }
     else
}

2 个答案:

答案 0 :(得分:5)

如上面的注释中所述,一种可移植的方式是将打开文件或 var myJson = read[Order](cutJson) 作为对函数的std::cin引用,然后在其中进行输入。在这种情况下,可以传递文件或istream。例如

std::cin

如果没有给出文件,则从#include <iostream> #include <fstream> #include <string> void readinfo (std::istream& in) { std::string s; while (in >> s) std::cout << s << '\n'; } int main (int argc, char **argv) { if (argc > 1) { /* read from file if given as argument */ std::ifstream fin (argv[1]); if (fin.is_open()) readinfo (fin); else { std::cerr << "error: file open failed.\n"; return 1; } } else { /* read from stdin */ readinfo (std::cin); } return 0; } 读取的非Linux唯一选项仅需要 ternary 运算符,例如

/dev/stdin

都不是完美的,但是两者都支持(受操作系统限制)

    std::ifstream fin (argc > 1 ? argv[1] : "/dev/stdin");
    if (!fin.is_open()) {
        std::cerr << "error: file open failed.\n";
        return 1;
    }
    /* read from fin here */

myprogram < input.txt

答案 1 :(得分:-2)

您想阅读stdin的内容,为此有2个选项:

  • std::cin
  • fread()和其他C风格的IO

std::cin >> https://en.cppreference.com/w/cpp/io/cin的优点是将格式化的文本读取为某种二进制表示形式https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt

C风格的IO https://en.cppreference.com/w/cpp/io/c具有很好地读取二进制数据的优点。

这取决于您要如何处理您的输入