2013-04-13 18:21:22 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# rubyzip [](http://travis-ci.org/aussiegeek/rubyzip)[](https://codeclimate.com/github/aussiegeek/rubyzip)
  
						 
					
						
							
								
									
										
										
										
											2002-01-03 01:48:31 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 05:49:16 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								rubyzip is a ruby library for reading and writing zip files.
							 
						 
					
						
							
								
									
										
										
										
											2002-01-03 01:48:31 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Installation
  
						 
					
						
							
								
									
										
										
										
											2012-04-08 05:21:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								rubyzip is available on RubyGems, so:
							 
						 
					
						
							
								
									
										
										
										
											2002-03-22 05:12:19 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-04-08 05:21:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								gem install rubyzip
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2002-03-22 05:12:19 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-04-08 05:21:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Or in your Gemfile:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```ruby
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								gem 'rubyzip'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2002-01-06 06:09:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Usage
  
						 
					
						
							
								
									
										
										
										
											2005-02-18 05:49:16 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Basic zip archive creation
  
						 
					
						
							
								
									
										
										
										
											2012-03-13 07:31:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```ruby
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require 'rubygems'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require 'zip/zip'
							 
						 
					
						
							
								
									
										
										
										
											2012-08-30 09:50:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								folder = "Users/me/Desktop/stuff_to_zip"
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								input_filenames = ['image.jpg', 'description.txt', 'stats.csv']
							 
						 
					
						
							
								
									
										
										
										
											2012-08-30 09:50:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								zipfile_name = "/Users/me/Desktop/archive.zip"
							 
						 
					
						
							
								
									
										
										
										
											2012-08-30 09:50:41 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Zip::ZipFile.open(zipfile_name, Zip::ZipFile::CREATE) do |zipfile|
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  input_filenames.each do |filename|
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # Two arguments:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # - The name of the file as it will appear in the archive
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # - The original file, including the path to find it
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    zipfile.add(filename, folder + '/' + filename)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  end
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								end
							 
						 
					
						
							
								
									
										
										
										
											2012-03-13 07:31:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-15 07:02:05 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								### Zipping a directory recursively
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```ruby
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require 'rubygems'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								require 'zip/zip'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								directory = '/Users/me/Desktop/directory_to_zip/'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								zipfile_name = '/Users/me/Desktop/recursive_directory.zip'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Zip::ZipFile.open(zipfile_name, Zip::ZipFile::CREATE) do |zipfile|
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									Dir[File.join(directory, '**', '**')].each do |file|
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									  zipfile.add(file.sub(directory, ''), file)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								end
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Further Documentation
  
						 
					
						
							
								
									
										
										
										
											2003-08-18 00:28:18 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-02-17 03:04:32 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								There is more than one way to access or create a zip archive with
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 04:27:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								rubyzip. The basic API is modeled after the classes in
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 17:27:37 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								java.util.zip from the Java SDK. This means there are classes such
							 
						 
					
						
							
								
									
										
										
										
											2005-02-17 03:04:32 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								as Zip::ZipInputStream, Zip::ZipOutputStream and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Zip::ZipFile. Zip::ZipInputStream provides a basic interface for
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								iterating through the entries in a zip archive and reading from the
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								entries in the same way as from a regular File or IO
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								object. ZipOutputStream is the corresponding basic output
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								facility. Zip::ZipFile provides a mean for accessing the archives
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								central directory and provides means for accessing any entry without
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								having to iterate through the archive. Unlike Java's
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								java.util.zip.ZipFile rubyzip's Zip::ZipFile is mutable, which means
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								it can be used to change zip files as well.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Another way to access a zip archive with rubyzip is to use rubyzip's
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 04:27:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Zip::ZipFileSystem API. Using this API files can be read from and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								written to the archive in much the same manner as ruby's builtin
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								classes allows files to be read from and written to the file system.
							 
						 
					
						
							
								
									
										
										
										
											2005-02-17 03:04:32 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-02-27 23:17:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								For details about the specific behaviour of classes and methods refer
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to the test suite. Finally you can generate the rdoc documentation or
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								visit http://rubyzip.sourceforge.net.
							 
						 
					
						
							
								
									
										
										
										
											2003-08-18 00:28:18 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2002-01-05 08:37:45 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Configuration
  
						 
					
						
							
								
									
										
										
										
											2002-01-06 06:09:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								By default, rubyzip will not overwrite files if they already exist inside of the extracted path.  To change this behavior, you may specify a configuration option like so:
							 
						 
					
						
							
								
									
										
										
										
											2003-08-18 00:28:18 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Zip.options[:on_exists_proc] = true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If you're using rubyzip with rails, consider placing this snippet of code in an initializer file such as `config/initializers/rubyzip.rb` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Additionally, if you want to configure rubyzip to overwrite existing files while creating a .zip file, you can do so with the following:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Zip.options[:continue_on_exists_proc] = true
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Developing
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								To run tests you need run next commands:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								bundle install
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								rake
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Website and Project Home
  
						 
					
						
							
								
									
										
										
										
											2002-03-30 08:52:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2011-09-21 20:00:01 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								http://github.com/aussiegeek/rubyzip
							 
						 
					
						
							
								
									
										
										
										
											2002-03-30 08:52:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-09-24 21:22:25 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								http://rdoc.info/github/aussiegeek/rubyzip/master/frames
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 06:21:59 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Authors
  
						 
					
						
							
								
									
										
										
										
											2002-01-05 08:37:45 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-04-08 05:21:02 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Alexander Simonov ( alex at simonov.me)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-09-24 21:22:25 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Alan Harper ( alan at aussiegeek.net)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2005-02-18 04:27:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Thomas Sondergaard (thomas at sondergaard.cc)
							 
						 
					
						
							
								
									
										
										
										
											2004-01-30 23:07:56 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-02-26 16:57:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Technorama Ltd. (oss-ruby-zip at technorama.net)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-13 07:31:55 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								extra-field support contributed by Tatsuki Sugiura (sugi at nemui.org)
							 
						 
					
						
							
								
									
										
										
										
											2012-05-22 04:09:31 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## License
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								rubyzip is distributed under the same license as ruby. See
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								http://www.ruby-lang.org/en/LICENSE.txt