我正在尝试在Go语言中处理嵌套的zip文件(即一个zip文件包含另一个zip文件)。我想要遍历zip文件并列出它包含的所有文件,但是archive/zip只提供了两种处理zip文件的方法:
我的问题是:有没有办法在不先将嵌套的zip文件写入磁盘或将整个文件读入内存的情况下打开嵌套的zip文件?
看起来
zip.NewReader
和zip.OpenReader
。OpenReader
打开磁盘上的文件,而NewReader
接受io.ReaderAt
和文件大小作为参数。当你使用其中任何一种方法遍历压缩文件时,你会获得一个zip.File
,里面包含zip文件中的每个文件,调用f.Open
可以得到zip.ReadCloser
以获取文件f的内容。要打开嵌套的zip文件,我需要使用NewReader
,但是zip.File
和zip.ReadCloser
都不符合io.ReaderAt
接口的要求。
zip.File
有一个私有字段zipr
,它是一个io.ReaderAt
,zip.ReadCloser
有一个私有字段f
,它是一个os.File
,应该满足对NewReader
的要求。我的问题是:有没有办法在不先将嵌套的zip文件写入磁盘或将整个文件读入内存的情况下打开嵌套的zip文件?
看起来
zip.File
提供了所有需要的东西,但是它们没有被导出。我希望我漏掉了什么。
bytes.Buffer
或磁盘中。嵌套的压缩文件有多大? - captncraigbytes.Buffer
的选择很好,我可以在读取整个文件之前检查文件大小,因为我可以访问它们。 - freb