尝试将gz文件提供给c ++程序

时间:2013-06-20 07:09:04

标签: c++ command-line gzip

我有一个c ++程序,它有一些命令行选项。其中一个是文件名。文件大小很大所以我决定压缩它,然后尝试找到一种方法,c ++程序读取压缩文件而不是纯文本文件。

根据这里所说的How to read a .gz file line-by-line in C++?我尝试了第二个答案,但它不起作用。

假设运行我的程序的正常命令行是

 ./run 1 file.txt 10

现在我跑

 zcat file.gz | ./run 1 file.gz 10

但输出无效。我该如何解决这个问题?

P.S:

该文件看起来像

10 1000
2   39
45 124

读取文件的代码看起来像

char *inp = argv[2];
std::ifstream fin (inp);
int a, b;
while (fin >> a >> b ) {
   // somthing
}

1 个答案:

答案 0 :(得分:2)

在您的情况下最简单的立即修复是改变这一点:

char *inp = argv[2];
std::ifstream fin (inp);
int a, b;
while (fin >> a >> b ) {
  // something
}

进入这个:

char *inp = argv[2];
int a, b;
while (std::cin >> a >> b ) {
  // something
}

我已将fin替换为std::cin。如果你还没有这样做,你需要#include <iostream>

这将从STDIN读取,这是管道|发送zcat输出的地方。

如果要保留两个版本 - 一个从文件读取,一个从STDIN读取 - 您可以使用命令行参数指示您正在从STDIN读取,然后具有if - 子句在代码中区分这两种用法。