加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用Rubyzip lib覆盖现有文件

发布时间:2020-12-16 19:30:16 所属栏目:百科 来源:网络整理
导读:我正在尝试使用目标目录中可能已存在或可能不存在的多个文件解压缩文件.似乎默认行为是在文件已存在时抛出异常. 如何解压缩到目录并简单地覆盖现有文件? 这是我的代码: begin Zip::ZipFile.open(source) do |zipfile| dir = zipfile.dir dir.entries('.').
我正在尝试使用目标目录中可能已存在或可能不存在的多个文件解压缩文件.似乎默认行为是在文件已存在时抛出异常.

如何解压缩到目录并简单地覆盖现有文件?

这是我的代码:

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

解决方法

似乎extract()采用一个可选块(onExistsProc),它允许您确定如果文件已经存在该如何处理 – 返回true以覆盖,返回false以引发异常.

如果您只想覆盖所有现有文件,可以执行以下操作:

zipfile.extract(entry,"#{target}/#{entry}") { true }

如果您想要执行更复杂的逻辑来以不同方式处理特定条目,您可以执行以下操作:

zipfile.extract(entry,"#{target}/#{entry}") {|entry,path| some_logic(entry,path) }

编辑:固定答案 – 正如英格玛哈默指出的那样,我的原始答案在使用上述语法预期时将块作为参数传递.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读