我正在尝试解压缩一个文件,该文件包含目标目录中可能已存在或可能尚未存在的多个文件.似乎默认行为是在文件已存在时抛出异常.
如何解压缩到目录并简单地覆盖现有文件?
这是我的代码:
begin
Zip::ZipFile.open(source) do |zipfile|
dir = zipfile.dir
dir.entries('.').each do |entry|
zipfile.extract(entry, "#{target}/#{entry}")
end
end
rescue Exception => e
log_error("Error unzipping file: #{local_zip} #{e.to_s}")
end
Run Code Online (Sandbox Code Playgroud)
小智 17
只为了拯救别人的麻烦:
答案2中的extract命令不正确:
第三个(proc)参数是用&符号指定的,这意味着ruby希望它在方法调用之后位于{} -Brackets中:
zipfile.extract(entry, "#{target}/#{entry}"){ true }
Run Code Online (Sandbox Code Playgroud)
或(如果您需要更复杂的逻辑)
zipfile.extract(entry, "#{target}/#{entry}") {|entry, path| some_logic(entry, path) }
Run Code Online (Sandbox Code Playgroud)
如果您使用Post#2中给出的示例,您将收到"无效参数(3 for for 2)"错误...
Gre*_*ell 15
似乎extract()采用一个可选块(onExistsProc),它允许您确定如果文件已存在该如何处理 - 返回true以覆盖,返回false以引发异常.
如果您只想覆盖所有现有文件,可以执行以下操作:
zipfile.extract(entry, "#{target}/#{entry}") { true }
Run Code Online (Sandbox Code Playgroud)
如果您想要执行一些更复杂的逻辑来以不同方式处理特定条目,您可以执行以下操作:
zipfile.extract(entry, "#{target}/#{entry}") {|entry, path| some_logic(entry, path) }
Run Code Online (Sandbox Code Playgroud)
编辑:固定答案 - 正如英格玛哈默指出的那样,我的原始答案在使用上述语法预期时将块作为参数传递.
| 归档时间: |
|
| 查看次数: |
7424 次 |
| 最近记录: |