gpt4 book ai didi

ruby - 如何使用 ruby​​zip 解压缩压缩文件夹

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:38 31 4
gpt4 key购买 nike

我知道如何使用 ruby​​zip 检索普通 zip 文件的内容。但是我在解压缩压缩文件夹的内容时遇到了问题,我希望你们中的任何人都能帮助我。

这是我用来解压的代码:

Zip::ZipFile::open(@file_location) do |zip|
zip.each do |entry|
next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
logger.debug "#{entry.name}"
@data = File.new("#{Rails.root.to_s}/tmp/#{entry.name}")
end
end

entry.name 给出了 zip 文件中文件的名称。这与普通的 zip 文件完美配合。但是当 zip 文件是从文件夹创建时,条目的名称类似于:test-folder/test.pdf。然后当我尝试创建文件时,它告诉我找不到文件。这可能是因为它位于 zip 内的“测试”文件夹中。

如果我检查条目是文件夹,则找不到文件夹。所以我认为解决方案是将条目作为流读取,然后将其保存为文件。获取入口流很容易,但如何将其保存为文件?这是我到目前为止得到的。

Zip::ZipFile::open(@file_location) do |zip|
zip.each do |entry|
next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
logger.debug "#{entry.name}"
@data = entry.get_input_stream.read
# How do i create a file from a stream?
end
end

基本上我的问题是:如何从流中创建文件?或者有比我更简单的方法吗?

===编辑===我使用回形针来存储文件。

最佳答案

我发现基于 jhwist 的更简单的方法工作正常:

Zip::File.open(@file_location) do |zipfile|
zipfile.each do |entry|
# The 'next if...' code can go here, though I didn't use it
unless File.exist?(entry.name)
FileUtils::mkdir_p(File.dirname(entry.name))
zipfile.extract(entry, entry.name)
end
end
end

条件显然是可选的,但如果没有它,代码将在尝试覆盖现有文件时引发错误。

关于ruby - 如何使用 ruby​​zip 解压缩压缩文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017408/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com