Goでネストされたzipファイル(zipファイルには別のzipファイルが含まれています)を処理するのには苦労しています。私はzipファイルを再帰させて、それに含まれているすべてのファイルを一覧表示しようとしています。アーカイブ/ zipでネストされたzipファイルを扱う
- zip.NewReader
- zip.OpenReader
OpenReader
は、ディスク上のファイルを開きます。
アーカイブ/ジッパーはあなたのzipファイルを処理するための2つのメソッドを提供します。 NewReader
は、io.ReaderAt
とファイルサイズを受け入れます。これらのいずれかを使用してzipファイルを繰り返し処理するときは、zip内の各ファイルについてzip.File
を取得します。ファイルfのファイル内容を取得するには、と呼び出してzip.ReadCloser
とします。ネストされたzipファイルを開くには、NewReader
を使用する必要がありますが、zip.File
とzip.ReadCloser
はio.ReaderAt
インターフェイスを満たしていません。
zip.File
はio.ReaderAt
とzip.ReadCloser
がNewReader
のための要件を満たす必要がありますos.File
あるプライベートフィールドf
を持っているプライベートフィールドzipr
があります。
私の質問:ディスク上のファイルに内容を書き込んだり、全体をメモリに読み込んだりすることなく、ネストされたzipファイルを開く方法はありますか?
必要なものはすべてzip.Fileで利用できますが、エクスポートされていないようです。私は何かを逃したことを望んでいる。
を動作しない場合があります私はそれを 'bytes.Buffer'またはディスクにコピーするのが最も簡単なことを恐れています。ネストしたzipの大きさはどれくらいですか? – captncraig
https://godoc.org/golang.org/x/tools/godoc/vfs/zipfsのapiもちょっとしたものです。わからない。 – captncraig
@captncraigこれは小さなスキャンプログラム用ですので、遭遇するZIPファイルがわかりません。私はこれがどれほど一般的なのかよく分かりません。私はストリームを使ってすべてを一緒に繋ぐことができたと感じました。 'bytes.Buffer'を呼ぶといいです。私はそれにアクセスできるので、すべてを読む前にファイルサイズを調べることができます。 – freb