使用ruby生成zip文件
程序员文章站
2022-03-15 17:55:20
...
首先安装rubyzip:
gem install rubyzip
《Ruby Cookbook》里面简要地介绍了如何使用rubyzip读写zip文件,代码如下:
但实际上这段代码没什么用处,一般我们都是要把已有的文件或文件夹压缩成zip,要怎么办呢?基本想法是递归遍历给定文件(目录),然后把文件一个一个的加入zip文件中。代码如下:
其实最主要的就是ZipFile类的add方法,第一个参数指定zip文件中的路径,第二个参数指定要被压缩的文件的路径。
另外还要注意的是Dir.foreach会返回指定目录中的所有子文件(目录),包括"."和"..",所以要做额外的判断。
gem install rubyzip
《Ruby Cookbook》里面简要地介绍了如何使用rubyzip读写zip文件,代码如下:
# 写zip require 'rubygems' require 'zip/zipfilesystem' Zip::ZipFile.open('zipfile.zip', Zip::ZipFile::CREATE) do |zip| zip.file.open('file1', 'w') { |f| f << 'This is file 1.' } zip.dir.mkdir('sub_dir') zip.file.open('sub_dir/file2', 'w') { |f| f << 'This is file 2.' } end
但实际上这段代码没什么用处,一般我们都是要把已有的文件或文件夹压缩成zip,要怎么办呢?基本想法是递归遍历给定文件(目录),然后把文件一个一个的加入zip文件中。代码如下:
def compress Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip| add_file_to_zip('dir', zip) end end def add_file_to_zip(file_path, zip) if File.directory?(file_path) Dir.foreach(file_path) do |sub_file_name| add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..' end else zip.add(file_path, file_path) end end
其实最主要的就是ZipFile类的add方法,第一个参数指定zip文件中的路径,第二个参数指定要被压缩的文件的路径。
另外还要注意的是Dir.foreach会返回指定目录中的所有子文件(目录),包括"."和"..",所以要做额外的判断。
上一篇: MySQL插入和查询语句操作(MYSQL语句操作教程1)
下一篇: ferret啊,为你欢喜为你忧。