2012-09-26 14 views
2

我需要iostream包裝zlib,允許將數據追加到現有流的末尾。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.你可以爲我的任務提出一些現成的解決方案嗎?

+2

看一下[Boost iostreams庫](http://www.boost.org/doc/libs/1_51_0/libs/iostreams/doc/index.html),它支持壓縮流。 –

+0

Boost庫與gzofstream具有相同的問題。它將流追加到文件中,但不會將數據添加到現有流中。 –

回答

1

看來,這種情況下就緒解決方案不存在:iostream包裝不支持追加操作。

我已經實現了基於gzlog和純C(而不是C++)的自己的代碼。

+1

您是否願意與社區分享? –