This project was sleeping for too long. Too many parts are not clean at all. So, here some cleanup: - add more test unit - clean msdos date/time format for zip - add crc32 - add version support - rewrite notes - rewrite the whole interface from scratch. - update github actions - update license (MIT) - create dotzip application - update notes regarding data-structure used - fix date and time ms-dos format (issue with endianess) - fix local file header encoding - update documentation - update with new extra fields and third party support - add extended timestamp third party support - add unix info new third party support
Dotzip
ZIP is one of the most widely used compressed file formats. It is universally used to aggregate, compress, and encrypt files into a single interoperable container. No specific use or application need is defined by this format and no specific implementation guidance is provided. This document provides details on the storage format for creating ZIP files. Information is provided on the records and fields that describe what a ZIP file is.
-- from official specification file
NOTE: This project is a work in progress. Please don't use it in
production (even in staging). Things are moving, and nothing is
stable. Many notes are present in notes directory, feel free to
react.
More information can be found in notes/ directory. This code is
generated using TDD and literate programming. All function or modules
added must be documented (with examples at least) and tested before
commit.
Installation
If available in Hex, the package can be
installed by adding dotzip to your list of dependencies in
mix.exs:
def deps do
[
{:dotzip, "~> 0.1.0"}
]
end
Decoding Example
create a zip file
cd /tmp
echo test > test
zip test.zip test
extract information
{:ok, file} = :file.read_file("/tmp/test.zip")
Dotzip.decode(file)
Resources
- https://www.loc.gov/preservation/digital/formats/fdd/fdd000362.shtml
- https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.3.TXT
- https://en.wikipedia.org/wiki/ZIP_(file_format)
Other implementation
- http://infozip.sourceforge.net/
- https://github.com/kuba--/zip
- https://github.com/zip-rs/zip
- https://github.com/Stuk/jszip
- https://github.com/srikanth-lingala/zip4j
Trademarks
PKWARE, PKZIP, SecureZIP, and PKSFX are registered trademarks of PKWARE, Inc. in the United States and elsewhere. PKPatchMaker, Deflate64, and ZIP64 are trademarks of PKWARE, Inc. Other marks referenced within this document appear for identification purposes only and are the property of their respective owners.
Notes
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/dotzip.