我很努力地處理Go中的嵌套zip文件(其中zip文件包含另一個zip文件)。我試圖緩存一個zip文件並列出它包含的所有文件。使用存檔/ zip處理嵌套的zip文件
存檔/ ZIP給你處理一個zip文件兩種方法:
- zip.NewReader
- zip.OpenReader
OpenReader
打開磁盤上的文件。 NewReader
接受io.ReaderAt
和文件大小。當你用這些壓縮文件遍歷壓縮文件時,你會得到zip中每個文件的zip.File
。要獲得文件f的文件內容,請撥打電話f.Open
,它會給您一個zip.ReadCloser
。要打開嵌套的zip文件,我需要使用NewReader
,但zip.File
和zip.ReadCloser
不符合io.ReaderAt
接口。
zip.File
具有私有字段zipr
其是io.ReaderAt
和zip.ReadCloser
具有私有字段f
其爲os.File
應該滿足NewReader
要求。
我的問題:有沒有辦法打開一個嵌套的zip文件,而無需先將內容寫入磁盤上的文件,或將整個內容讀入內存。
它看起來像所有需要的東西在zip.File中可用,但不會被導出。我希望我錯過了一些東西。
我擔心最簡單的做法是將其複製到'bytes.Buffer'或磁盤中。嵌套的拉鍊有多大? – captncraig
您可能會發現https://godoc.org/golang.org/x/tools/godoc/vfs/zipfs的api也更具有適應性。不確定。 – captncraig
@captncraig這是一個小型掃描程序,所以我不知道我會遇到什麼zip文件。我不確定這種情況會有多普遍,我只是覺得能夠使用流來將所有東西放在一起。好的調用'bytes.Buffer',我想我可以在閱讀整個事情之前檢查文件大小,因爲我可以訪問它。 – freb