说明
RubyZip 用于 ruby 进行 zip 的压缩和解压
安装方法
gem install rubyzip
使用例子
# 配置例子
require 'zip'
Zip.setup do |c|
# 当压缩包里边存在同名文件时,自动覆盖。但如果有同名文件夹,还是会抛异常
c.continue_on_exists_proc = true
# 解压时自动覆盖文件
c.on_exists_proc = true
# 强制编码为 UTF-8
c.force_entry_names_encoding = 'UTF-8'
# c.default_compression = Zlib::BEST_COMPRESSION
end
# 压缩例子 1
require 'zip'
input_file = '输入文件'
output_zip = '输出 zip'
Zip::File.open(output_zip, Zip::File::CREATE) do |zip_file|
# 添加文件
# 文件名支持带有目录,会在压缩包里边自动创建目录
# 文件名需使用相对路径
zip_file.add('文件', input_file)
zip_file.add('文件夹/文件', input_file)
# 添加目录
zip_file.mkdir('创建目录')
end
# 压缩例子 2
# https://github.com/rubyzip/rubyzip/blob/9d891f7353e66052283562d3e252fe380bb4b199/samples/example_recursive.rb
# 解压例子
# 解压时压缩包里边的文件夹会被自动创建(空目录也会被创建),但输出路径 output_dir 必须存在,否则抛异常
require 'zip'
input_zip = 'zip 文件路径'
output_dir = '输出路径'
Zip::File.open(input_zip) do |zip_file|
zip_file.each do |entry|
entry.extract(File.join(output_dir, entry.name))
end
end