Project

seven-zip

0.01
Low commit activity in last 3 years
No release in over a year
SevenZipRuby (seven-zip) is a ruby gem library to read and write 7zip archives. This gem is based on seven_zip_ruby gem by Masamitsu MURASE (masamitsu.murase@gmail.com).
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 13
~> 3
 Project Readme

SevenZipRuby Logo

RSpec Gem Version

This is a Ruby gem library to extract/compress 7-Zip archives.

This extension calls the native library, 7z.dll or 7z.so, internally and these libraries are included in this gem.

Features

  • Uses official shared library, 7z.dll or 7z.so, internally.
  • Supports extracting data into memory.

Document

RDoc shows you the details.

Examples

Extract archives

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.open(file) do |szr|
    szr.extract_all "path_to_dir"
  end
end

You can also use simpler method.

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.extract_all(file, "path_to_dir")
end

Show the entries in the archive

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.open(file) do |szr|
    list = szr.entries
    p list
    # => [ "#<EntryInfo: 0, dir, dir/subdir>", "#<EntryInfo: 1, file, dir/file.txt>", ... ]
  end
end

Extract encrypted archives

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.open(file, { password: "Password String" }) do |szr|
    szr.extract_all "path_to_dir"
  end
end

or

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.extract_all(file, "path_to_dir", { password: "Password String" })
end

If the password is invalid or missing no data will be returned for encrypted archive entries.

Verify archives

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.verify(file)
  # => true/false
end

Compress files

File.open("filename.7z", "wb") do |file|
  SevenZipRuby::Writer.open(file) do |szr|
    szr.add_directory("dir")
  end
end

or

File.open("filename.7z", "wb") do |file|
  SevenZipRuby::Writer.add_directory(file, "dir")
end

Supported environment

SevenZipRuby supports the following platforms.

  • Windows
  • Linux
  • Mac OSX

SevenZipRuby supports the following Ruby engines on each platform.

  • MRI 2.5.0 and later

More examples

Extract partially

Extract files whose size is less than 1024.

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.open(file) do |szr|
    small_files = szr.entries.select{ |i| i.file? && i.size < 1024 }
    szr.extract(small_files, "path_to_dir")
  end
end

Get data from archives

Extract data into memory.

data = nil
File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Reader.open(file) do |szr|
    smallest_file = szr.entries.select(&:file?).min_by(&:size)
    data = szr.extract_data(smallest_file)
  end
end
p data
#  => File content is shown.

Create an archive manually

File.open("filename.7z", "rb") do |file|
  SevenZipRuby::Writer.open(file) do |szr|
    szr.add_file "entry1.txt"
    szr.mkdir "dir1"
    szr.mkdir "dir2"

    data = [0, 1, 2, 3, 4].pack("C*")
    szr.add_data data, "entry2.txt"
  end
end

You can also create a self extracting archive for Windows.

File.open("filename.exe", "rb") do |file|
  # :gui and :console can be specified as :sfx parameter.
  SevenZipRuby::Writer.open(file, sfx: :gui) do |szr|
    szr.add_data "file content", "file.txt"
  end
end

Set compression mode

7zip supports LZMA, LZMA2, PPMD, BZIP2, DEFLATE and COPY.

# random data
data = 50000000.to_enum(:times).map{ rand(256) }.pack("C*")

a = StringIO.new("")
start = Time.now
SevenZipRuby::Writer.open(a) do |szr|
  szr.method = "BZIP2"     # Set compression method to "BZIP2"
  szr.multi_thread = false # Disable multi-threading mode
  szr.add_data(data, "test.bin")
end
p(Time.now - start)
#  => 11.180934

a = StringIO.new("")
start = Time.now
SevenZipRuby::Writer.open(a) do |szr|
  szr.method = "BZIP2"     # Set compression method to "BZIP2"
  szr.multi_thread = true  # Enable multi-threading mode (default)
  szr.add_data(data, "test.bin")
end
p(Time.now - start)
#  => 3.607563    # Faster than single-threaded compression.

License

LGPL license. Please refer to LICENSE.txt.

Releases

The last version published at rubygems.org is 1.4.2 Should you need the latest version please install it from this repo