2

我需要 zlib 的 iostream 包装器,它允许将数据附加到现有流的末尾。

附加模式下的 gzopen() 函数遵循下一条规则。“附加时,gzopen 不会测试文件是否以 gzip 流开头,也不会寻找 gzip 流的结尾来开始附加。gzopen 只会将 gzip 流附加到现有文件。” 例如,使用“a”选项打开文件将创建具有多个压缩流的文件。

zlib 的 gzofstream 包装器将参数列表中的 std::ios_base::app 转换为 gzopen() 函数的“ab”模式。因此,gzofstream 还将创建具有多个流的文件。

但是,在我的应用程序中,我需要替代行为。主模块应该以附加模式打开文件(使用 std::ios_base::app 选项),在现有流的末尾写入小数据部分,然后关闭文件。例如,经过多次打开/关闭操作后,文件应始终包含单个压缩流。

zlib 中的 gzlog 示例具有接近所需的功能。但是,它是纯C。

你能为我的任务提出一些现成的解决方案吗?

4

1 回答 1

1

对于这种情况,似乎不存在现成的解决方案:iostream 包装器不支持附加操作。

我已经基于 gzlog 和纯 C(不是 C++)实现了自己的代码。

于 2012-12-22T12:51:13.803 回答