2014-09-20 61 views
1

我有一個巨大的輸入文件,兆兆字節(它是gzipped(.gz))。如何在不解壓縮的情況下創建並追加到gz文件?

我需要分別讀取每一行,並決定是否將其添加到一個新的文件。

輸出文件也有望在大小TB的,但小,因爲我不會添加的所有文件。

有沒有一種方法,要做到這在C++使用標準庫?我不想使用提升。那可能嗎 ?

+0

您是否檢查過技術上是否可以(文件格式明智)追加到gzip文件?如果不是,這不是一個編程問題。 – trojanfoe 2014-09-20 19:20:56

+0

我不知道這是否可能。我知道你可以在不解壓文件的情況下讀取它(例如:在終端中你可以使用zcat或zless),所以我想你也可以使用C++讀取gzip。 – 2014-09-20 19:23:47

回答

0

標準C++庫不處理gzip格式。標準的C庫也沒有。我不知道有關提升。

但你當然可以使用zlib,我相信都帶有C++包裝,如果使用C是望而生畏。

這不是一般將追加到一個壓縮文件,順便說一個好主意,但它在理論上是可能的。但是你失去了很多壓縮,因爲算法需要重置,從而失去了上下文。但是,您可以打開一個壓縮的流並寫入它,因此您不需要將未壓縮的文件寫入磁盤。我認爲這就是你所需要的這個查詢。

+0

壓縮流是什麼意思?什麼樣的壓縮? – 2014-09-20 20:12:47

+1

@john:gzip壓縮。壓縮流是一種流(io流意義上的流),它在輸入時會進行壓縮並/或在輸入時進行解壓縮,以便壓縮版本位於磁盤上,而未壓縮版本位於內存中。對於C接口,請參閱http://www.zlib.net/manual.html#Gzip。一個C++接口正在推進,但你已經表明你不想使用它。 – rici 2014-09-21 01:31:22

相關問題