Skip to content

crystal-garage/crystal-zip64

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

crystal-zip64

Crystal CI GitHub release Docs License

An alternate ZIP reader and writer for Crystal.

  • Drop-in replacement for Compress::Zip
  • Allows you to compress files bigger than 4GB
  • Tested on Linux, macOS and Windows

Extracted from crystal-lang/crystal#11396. Based on crystal-lang/crystal#7236.

Inspired by https://github.com/WeTransfer/cr_zip_tricks

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      zip64:
        github: crystal-garage/crystal-zip64
  2. Run shards install

Usage

require "zip64"

Reader

Zip64::Reader.open("./file.zip") do |zip|
  zip.each_entry do |entry|
    p entry.filename
    p entry.file?
    p entry.dir?
    p entry.io.gets_to_end
  end
end

Writer

File.open("./file.zip", "w") do |file|
  Zip64::Writer.open(file) do |zip|
    # Add a file with a String content
    zip.add "foo.txt", "contents of foo"

    # Add a file and write data to it through an IO
    zip.add("bar.txt") do |io|
      io << "contents of bar"
    end

    # Add a file by referencing a file in the filesystem
    # (the file is automatically closed after this call)
    zip.add("baz.txt", File.open("./some_file.txt"))

    # Add a directory
    zip.add_dir("dir")
  end
end

Contributing

  1. Fork it (https://github.com/crystal-garage/crystal-zip64/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors