 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Reading and Writing Zip Files | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'rubygems'
require 'zip/zipfilesystem'
Zip::ZipFile.open('zipfile.zip', Zip::ZipFile::CREATE) do |zip|
  zip.file.open('file1', 'w') { |f1| f1 << 'This is file 1.' }
  zip.dir.mkdir('subdirectory')
  zip.file.open('subdirectory/file2', 'w') { |f1| f1 << 'This is file 2.' }
end
def process_zipfile(zip, path='')
  if zip.file.file? path
    puts %{#{path}: "#{zip.read(path)}"}
  else
    unless path.empty?
      path += '/'
      puts path
    end
    zip.dir.foreach(path) do |filename|
      process_zipfile(zip, path + filename)
    end
  end
end
Zip::ZipFile.open('zipfile.zip') do |zip|
  process_zipfile(zip)
end | subdirectory/ subdirectory/file2: "This is file 2." file1: "This is file 1." | subdirectory/ subdirectory/file2: "This is file 2." file1: "This is file 1." | 
| Zip::ZipFile.open('zipfile2.zip', Zip::ZipFile::CREATE) do |zip|
  zip.get_output_stream('file1') { |f| f << 'This is file 1.' }
  zip.mkdir('subdirectory')
  zip.get_output_stream('subdirectory/file2') { |f| f << 'This is file 2.' }
end | #<File:./file2716.1 (closed)> | |