【问题标题】:How to create and append to a gz file without decompressing?如何在不解压缩的情况下创建并附加到 gz 文件?
【发布时间】:2014-11-15 03:22:04
【问题描述】:

我有一个巨大的输入文件,大小为 TB(它是 gzip 压缩的 (.gz))。

我需要单独读取每一行,并决定是否将其添加到新文件中。

输出文件的大小也预计为 TB,但较小,因为我不会添加所有文件。

有没有办法在 C++ 中使用标准库来做到这一点?我不想使用升压。这可能吗?

【问题讨论】:

  • 您是否检查过附加到 gzip 文件在技术上是否可行(文件格式方面)?如果不是,这不是编程问题。
  • 不知道有没有可能。我知道你可以在不解压文件的情况下读取它(例如:在终端中你可以使用 zcat 或 zless),所以我想你也可以使用 c++ 从 gzip 中读取。

标签: c++ macos unix gzip


【解决方案1】:

标准 C++ 库不处理 gzip 格式。标准 C 库也不行。我不知道提升。

但你当然可以使用zlib,如果 C 的使用太令人生畏,我相信它会附带一个 C++ 包装器。

顺便说一句,附加到 gzip 压缩文件通常不是一个好主意,尽管理论上是可行的。但是您会丢失很多压缩,因为需要重置算法并因此丢失上下文。但是,您可以打开压缩流并对其进行写入,因此您无需将未压缩的文件写入磁盘。我认为这就是您进行此查询所需的全部内容。

【讨论】:

  • 压缩流是什么意思?什么样的压缩?
  • @john:gzip 压缩。压缩流是一种流(在 io 流的意义上),它在输出时压缩和/或在输入时解压缩,因此压缩版本在磁盘上,未压缩版本在内存中。 C接口见zlib.net/manual.html#Gzip。一个 C++ 接口正在增强,但您已表明您不想使用它。
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
相关资源
最近更新 更多