RubyでZipファイル
- RubyGemsでrubyzipをインストールする必要がある。
> gem install rubyzip
- 圧縮の仕方
Zip::ZipFile.open("zipファイル名", Zip::ZipFile::CREATE) do |zf| zf.add("zipファイル中のパス(相対パスでもOK)", "元ファイルのパス") zf.mkdir("zipファイル中のディレクトリ") end
- 圧縮サンプルプログラム
カレントディレクトリ内のフォルダを全てzip圧縮する。
require 'rubygems' require 'zip/zip' require 'fileutils' require 'kconv' def make_zip(zf, src, options) if File.file?(src) zf.add(src, src) return elsif File.directory?(src) zf.mkdir(src) Dir.foreach(src) do |f| next if f == "." or f == ".." make_zip(zf, src + '/' + f, options) end return end end # src file or directory # dest zip filename # options :fs_encoding=[UTF-8,Shift_JIS,EUC-JP] def zip(src, dest, options = {}) File.unlink(dest) if File.exist?(dest) Zip::ZipFile.open(dest, Zip::ZipFile::CREATE) do |zf| make_zip(zf, src, options) end end Dir::foreach(".") do |d| next if d == "." or d == ".." next if File::ftype(d) != "directory" puts d zip(d, d + ".zip", :fs_encoding => "Shift_JIS") end
- rubyzipのドキュメント
http://rubyzip.sourceforge.net/
- 気になっている点
- zipファイルに入れるファイル/フォルダの属性(パーミション、オーナー、タイムスタンプなど)が設定できないのでイマイチ。
- 作成したzipファイルの中身をLhazで見てみると、フォルダにフォルダアイコンが付かない。なぜ??