我正在尝试使用目标目录中可能已存在或可能不存在的多个文件解压缩文件.似乎默认行为是在文件已存在时抛出异常.
如何解压缩到目录并简单地覆盖现有文件?
这是我的代码:
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) }
编辑:固定答案 – 正如英格玛哈默指出的那样,我的原始答案在使用上述语法预期时将块作为参数传递.