【发布时间】:2026-01-23 04:35:02
【问题描述】:
我有一个带有一些命令行选项的 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
但是输出无效。我该如何解决?
附注:
文件看起来像
10 1000
2 39
45 124
读取文件的代码看起来像
char *inp = argv[2];
std::ifstream fin (inp);
int a, b;
while (fin >> a >> b ) {
// somthing
}
【问题讨论】:
-
你能改变你的程序,让它从 STDIN 读取而不是打开给定的文件名吗?
-
什么意思?使用 STDIN,我必须以交互方式输入。正确的?请查看更新后的帖子
-
zcat在其 STDOUT 上生成输出。管道|将此转发到您的进程的标准输入。这就是管道的作用。 -
好的,我明白了。那么我怎样才能改变程序来满足这种需求呢?可以回复一下吗?
标签: c++ command-line gzip