ruby 如何读取另一个zip文件中的zip文件的内容而不提取

kb5ga3dv  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(94)

我有一个zip文件,其中包含许多zip文件。我想检查一个内部压缩包的内容,* 而不 * 将其解压缩到文件系统。
如果我用Zip::File.foreach覆盖外部zip文件的内容,我会得到一个Zip::Entry,它代表我想要检查的zip文件的内容。我不知道如何做到这一点,而不提取子压缩到文件系统。
我可以在su-bzip上调用.extract("some_destination.zip"),然后将其视为普通的顶级zip)。这是可行的,但我只是试图在单元测试中验证内容,不想向文件系统中写入不必要的内容。
边注:在任何人问“为什么”我有子拉链,或指出缺乏压缩价值这样做.这是因为苹果希望你创建一个拉链拉链,以便同时向苹果钱包添加多张门票。

b4wnujal

b4wnujal1#

一种简单的方法是在内存中读取外部zip条目的内容,然后使用Zip::File.open_buffer API示例化一个新的Zip示例。
在下面的示例中,为了简单起见,我们假设外部zip文件包含内部zip文件,内部zip文件包含纯文本文件:

require 'zip'
require 'stringio'

outer_zip_file = Zip::File.open('outer.zip')

outer_entry = outer_zip_file.entries.first
outer_entry_data = outer_entry.get_input_stream.read

inner_zip = Zip::File.open_buffer(outer_entry_data)

inner_entry = inner_zip.entries.first
puts inner_entry.get_input_stream.read

使用流来完成相同的任务可能是可行的,但是它更容易出错(也就是说,在调试时意外地多次阅读),并且如果文件足够小(当然,没有攻击的风险),在内存中进行阅读是可以接受的。

相关问题