# man > Archive::Zip

---
type: CommandReference
command: Archive::Zip
mode: perldoc
section: 3pm
source: perldoc
---

## Quick Reference

- `use Archive::Zip; my $zip = Archive::Zip->new();` — Create a new empty zip archive.
- `$zip->addFile('file.txt', 'archive_name.txt');` — Add a file from disk.
- `$zip->addString('content', 'name.txt');` — Add a string as a member.
- `$zip->addDirectory('dirname/');` — Add a directory.
- `$zip->read('archive.zip');` — Read an existing zip file.
- `$member = $zip->memberNamed('name.txt'); my $content = $member->contents();` — Extract member data.
- `$member->desiredCompressionMethod(COMPRESSION_DEFLATED);` — Set compression.
- `$zip->writeToFileNamed('output.zip');` — Write zip to a file.

## Name

**Archive::Zip** — Provide an interface to ZIP archive files.

## Synopsis

perl
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
my $zip = Archive::Zip->new();

# Add a directory
my $dir_member = $zip->addDirectory('dirname/');

# Add a file from a string with compression
my $string_member = $zip->addString('This is a test', 'stringMember.txt');
$string_member->desiredCompressionMethod(COMPRESSION_DEFLATED);

# Add a file from disk
my $file_member = $zip->addFile('xyz.pl', 'AnotherName.pl');

# Save the Zip file
$zip->writeToFileNamed('someZip.zip') == AZ_OK or die 'write error';

# Read a Zip file
my $somezip = Archive::Zip->new();
$somezip->read('someZip.zip') == AZ_OK or die 'read error';

# Change compression type for a member
my $member = $somezip->memberNamed('stringMember.txt');
$member->desiredCompressionMethod(COMPRESSION_STORED);
$zip->writeToFileNamed('someOtherZip.zip') == AZ_OK or die 'write error';
## Options

### Constructor

- `Archive::Zip->new([$fileName])` — Create a new empty zip archive. If `$fileName` is given, calls `read()` to load it.

### Archive Utility Methods

- `Archive::Zip::computeCRC32($string[, $crc])` — Compute CRC-32 checksum.
- `Archive::Zip::setChunkSize($number)` — Set global chunk size for I/O (default 32K).
- `Archive::Zip::chunkSize()` — Return current chunk size.
- `Archive::Zip::setErrorHandler(\&subroutine)` — Set error handler; default is `Carp::carp`.
- `Archive::Zip::tempFile([$tmpdir])` — Create a temporary file; returns `($fh, $name)`.

### Archive Accessors

- `$zip->members()` — Return array of all members.
- `$zip->numberOfMembers()` — Return number of members.
- `$zip->memberNames()` — Return list of member names.
- `$zip->memberNamed($name)` — Return member by name (zip format) or undef.
- `$zip->membersMatching($regex)` — Return array of members matching regex.
- `$zip->zipfileComment([$comment])` — Get/set archive comment.
- `$zip->fileName()` — Name of last read file.
- `$zip->zip64()` — Whether archive was read/written in zip64 format.
- `$zip->desiredZip64Mode()` — Get/set zip64 writing mode (ZIP64_AS_NEEDED, ZIP64_EOCD, ZIP64_HEADERS).

### Member Operations (on Archive)

- `$zip->removeMember($memberOrName)` — Remove and return member.
- `$zip->replaceMember($memberOrName, $newMember)` — Replace member with another.
- `$zip->extractMember($memberOrName[, $extractedName])` — Extract member to file.
- `$zip->extractMemberWithoutPaths($memberOrName[, $extractedName])` — Extract without paths.
- `$zip->addMember($member)` — Append a member (from another zip).
- `$zip->updateMember($memberOrName, $fileName)` — Update member from file if changed.
- `$zip->addFile($fileName[, $newName, $compressionLevel])` — Add file from disk.
- `$zip->addDirectory($directoryName[, $fileName])` — Add directory.
- `$zip->addFileOrDirectory($name[, $newName, $compressionLevel])` — Add file or directory.
- `$zip->addString($stringOrStringRef, $name[, $compressionLevel])` — Add string as member.
- `$zip->contents($memberOrMemberName[, $newContents])` — Get/set member uncompressed data.

### I/O Operations

- `$zip->writeToFileNamed($fileName)` — Write archive to file.
- `$zip->writeToFileHandle($fileHandle[, $seekable])` — Write to file handle.
- `$zip->writeCentralDirectory($fileHandle[, $offset])` — Write central directory.
- `$zip->overwriteAs($newName)` — Safely write to a new file.
- `$zip->overwrite()` — Write back to original file.
- `$zip->read($fileName)` — Read zip from file.
- `$zip->readFromFileHandle($fileHandle, $filename)` — Read from open file handle.

### Tree Operations

- `$zip->addTree($root, $dest[, $pred, $compressionLevel])` — Add tree of files.
- `$zip->addTreeMatching($root, $dest, $pattern[, $pred, $compressionLevel])` — Add tree matching regex.
- `$zip->updateTree($root[, $dest, $pred, $mirror, $compressionLevel])` — Update tree, optionally mirror deletions.
- `$zip->extractTree([$root, $dest, $volume])` — Extract members matching root path.

### Member Accessors (on individual `Archive::Zip::Member` objects)

- `$member->zip64()` — Whether member was read/written in zip64 format.
- `$member->desiredZip64Mode()` — Get/set zip64 writing mode for member.
- `$member->versionMadeBy()` — Version made by field.
- `$member->versionNeededToExtract()` — Version needed to extract.
- `$member->bitFlag()` — General purpose bit field.
- `$member->compressionMethod()` — Current compression method.
- `$member->desiredCompressionMethod([$method])` — Get/set desired compression (COMPRESSION_STORED or COMPRESSION_DEFLATED).
- `$member->desiredCompressionLevel([$level])` — Get/set compression level (0-9 or constants).
- `$member->fileName()` — Get/set internal filename.
- `$member->lastModTime()` — Last modification time (Unix time).
- `$member->lastModFileDateTime()` — Last modification in MS-DOS format.
- `$member->setLastModFileDateTimeFromUnix($time)` — Set from Unix time.
- `$member->unixFileAttributes([$attr])` — Get/set Unix file attributes.
- `$member->localExtraField([$field])` — Get/set local extra field.
- `$member->cdExtraField([$field])` — Get/set central directory extra field.
- `$member->fileComment([$comment])` — Get/set member comment.
- `$member->crc32()` — CRC-32 value.
- `$member->crc32String()` — CRC-32 as hex string.
- `$member->compressedSize()` — Compressed size.
- `$member->uncompressedSize()` — Uncompressed size.
- `$member->password([$password])` — Get/set password for decryption.
- `$member->isEncrypted()` — True if encrypted.
- `$member->isTextFile([$flag])` — Get/set text file flag.
- `$member->isBinaryFile()` — True if binary.
- `$member->isDirectory()` — True if directory.
- `$member->isSymbolicLink()` — True if symbolic link.
- `$member->extractToFileNamed($fileName)` — Extract to a file.
- `$member->contents()` — Get/set member data.
- `$member->extractToFileHandle($fh)` — Extract to file handle.
- `$member->readChunk([$chunkSize])` — Read next chunk of data.
- `$member->rewindData()` — Rewind for reading/writing.
- `$member->endRead()` — End read session.
- `$member->readIsDone()` — True if all data read.

## Examples

### Create and write a zip

perl
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
my $zip = Archive::Zip->new();
$zip->addDirectory('mydir/');
$zip->addString('Hello', 'hello.txt');
$zip->addFile('/etc/hosts', 'hosts.txt');
$zip->writeToFileNamed('myarchive.zip') == AZ_OK or die 'write error';
### Read and extract a member

perl
my $zip = Archive::Zip->new();
$zip->read('myarchive.zip') == AZ_OK or die 'read error';
my $member = $zip->memberNamed('hello.txt');
$member->extractToFileNamed('hello_out.txt') == AZ_OK or die 'extract error';
### Add a tree of files

perl
$zip->addTree('.', 'backup', sub { -f && -r });
$zip->writeToFileNamed('backup.zip');
### Update and overwrite

perl
$zip->updateTree('.', 'backup', undef, 1);  # mirror deletions
$zip->overwrite();
## See Also

- [Archive::Zip::MemberRead](http://localhost/phpMan.php/perldoc/Archive%3A%3AZip%3A%3AMemberRead/markdown) — Read zip members as files.
- [Compress::Raw::Zlib](http://localhost/phpMan.php/perldoc/Compress%3A%3ARaw%3A%3AZlib/markdown) — Compression library.
- [Archive::Tar](http://localhost/phpMan.php/perldoc/Archive%3A%3ATar/markdown) — Tar archive interface.
- [Archive::Extract](http://localhost/phpMan.php/perldoc/Archive%3A%3AExtract/markdown) — Unified archive extraction.

## Exit Codes

- `AZ_OK (0)` — Success.
- `AZ_STREAM_END (1)` — End of stream.
- `AZ_ERROR (2)` — Generic error.
- `AZ_FORMAT_ERROR (3)` — Format error in zip file.
- `AZ_IO_ERROR (4)` — I/O error.