# class Compress::Zip::Writer

- Compress::Zip::Writer
- Reference
- Object

##
Overview

Writes (streams) zip entries to an `IO`.

###
Example

    require "compress/zip"

    File.open("./file.zip", "w") do |file|
      Compress::Zip::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"))
      end
    end

##
Defined in:

compress/zip/writer.cr

##
Constructors

- .new(io : IO, sync_close : Bool = false)

  Creates a new writer to the given io.

- .new(filename : Path | String)

  Creates a new writer to the given filename.

##
Class Method Summary

- .open(io : IO, sync_close = false, &)

  Creates a new writer to the given io, yields it to the given block, and closes it at the end.

- .open(filename : Path | String, &)

  Creates a new writer to the given filename, yields it to the given block, and closes it at the end.

##
Instance Method Summary

- #add(filename : Path | String, &)

  Adds an entry that will have the given filename and current time (`Time.utc`) and yields an `IO` to write that entry's contents.

- #add(entry : Entry, &)

  Adds an entry and yields `IO` to write that entry's contents.

- #add(filename_or_entry : Path | String | Entry, string : String) : Nil

  Adds an entry that will have string as its contents.

- #add(filename_or_entry : Path | String | Entry, bytes : Bytes) : Nil

  Adds an entry that will have bytes as its contents.

- #add(filename_or_entry : Path | String | Entry, data : IO) : Nil

  Adds an entry that will have its data copied from the given data.

- #add_dir(name) : Nil

  Adds a directory entry that will have the given name.

- #close : Nil

  Closes this zip writer.

- #closed? : Bool

  Returns `true` if this writer is closed.

- #comment=(comment : String)

  Sets the zip file comment

- #sync_close=(sync_close : Bool)

  Whether to close the enclosed `IO` when closing this writer.

- #sync_close? : Bool

  Whether to close the enclosed `IO` when closing this writer.

### Instance methods inherited from class `Reference`

==(other : self)
==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s

### Constructor methods inherited from class `Reference`

new new, unsafe_construct(address : Pointer, *args, **opts) : self unsafe_construct

### Class methods inherited from class `Reference`

pre_initialize(address : Pointer) pre_initialize

### Instance methods inherited from class `Object`

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

### Class methods inherited from class `Object`

from_json(string_or_io, root : String)
from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml

### Macros inherited from class `Object`

class_getter(*names, &block) class_getter, class_getter!(*names) class_getter!, class_getter?(*names, &block) class_getter?, class_property(*names, &block) class_property, class_property!(*names) class_property!, class_property?(*names, &block) class_property?, class_setter(*names) class_setter, def_clone def_clone, def_equals(*fields) def_equals, def_equals_and_hash(*fields) def_equals_and_hash, def_hash(*fields) def_hash, delegate(*methods, to object) delegate, forward_missing_to(delegate) forward_missing_to, getter(*names, &block) getter, getter!(*names) getter!, getter?(*names, &block) getter?, property(*names, &block) property, property!(*names) property!, property?(*names, &block) property?, setter(*names) setter

##
Constructor Detail

def self.new(io : IO, sync_close : Bool = false) #

Creates a new writer to the given io.

def self.new(filename : Path | String) #

Creates a new writer to the given filename.

##
Class Method Detail

def self.open(io : IO, sync_close = false, &) #

Creates a new writer to the given io, yields it to the given block, and closes it at the end.

def self.open(filename : Path | String, &) #

Creates a new writer to the given filename, yields it to the given block, and closes it at the end.

##
Instance Method Detail

def add(filename : Path | String, &) #

Adds an entry that will have the given filename and current time (`Time.utc`) and yields an `IO` to write that entry's contents.

def add(entry : Entry, &) #

Adds an entry and yields `IO` to write that entry's contents.

You can choose the Entry's compression method before adding it.

- If the STORED compression method is used, its crc32, compressed size and uncompressed size must be set and be correct with respect to the data that will be written to the yielded `IO`.
- If the DEFLATED compression method is used, crc32, compressed size and uncompressed size will be computed from the data written to the yielded IO.

You can also set the Entry's time (which is `Time.utc` by default) and extra data before adding it to the zip stream.

def add(filename_or_entry : Path | String | Entry, string : String) : Nil #

Adds an entry that will have string as its contents.

def add(filename_or_entry : Path | String | Entry, bytes : Bytes) : Nil #

Adds an entry that will have bytes as its contents.

def add(filename_or_entry : Path | String | Entry, data : IO) : Nil #

Adds an entry that will have its data copied from the given data. If the given data is a `::File`, it is automatically closed after data is copied from it.

def add_dir(name) : Nil #

Adds a directory entry that will have the given name.

def close : Nil #

Closes this zip writer.

def closed? : Bool #

Returns `true` if this writer is closed.

def comment=(comment : String) #

Sets the zip file comment

def sync_close=(sync_close : Bool) #

Whether to close the enclosed `IO` when closing this writer.

def sync_close? : Bool #

Whether to close the enclosed `IO` when closing this writer.