我有一个包含许多 zip 文件的 zip 文件。我想检查内部 zip 的内容而不将其提取到文件系统。
如果我迭代外部 zip 文件的内容,Zip::File.foreach
我会得到代表Zip::Entry
我想要检查其内容的 zip 文件的 a 。如果不将子 zip 解压到文件系统,我不知道如何做到这一点。
我可以调用.extract("some_destination.zip")
su-bzip,然后将其视为普通的顶级 zip)。这可行,但我只是想验证单元测试中的内容,并且不想将不必要的内容写入文件系统。
旁注:在有人问“为什么”我有子压缩包之前,或者指出这样做缺乏压缩价值之前......这是因为苹果希望你创建一个压缩包,以便将多张票添加到苹果钱包中同时。
一种简单的方法是在内存中读取外部 zip 条目的内容,然后
Zip
使用Zip::File.open_buffer
API 实例化一个新实例。在下面的示例中,为简单起见,我们假设一个外部 zip 文件,其中包含一个内部 zip 文件,其中包含一个纯文本文件:
可能可以使用流来完成相同的任务,但更容易犯错误(即在调试时意外读取多次),并且如果文件足够小(当然,不存在受到攻击的风险),则读取记忆中是可以接受的。