~ubuntu-branches/ubuntu/gutsy/horae/gutsy

« back to all changes in this revision

Viewing changes to 0CPAN/Archive-Zip-1.16/lib/Archive/Zip.pod

  • Committer: Bazaar Package Importer
  • Author(s): Carlo Segre
  • Date: 2006-12-28 12:36:48 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20061228123648-9xnjr76wfthd92cq
Tags: 064-1
New upstream release, dropped dependency on libtk-filedialog-perl.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
=head1 NAME
3
 
 
4
 
 
5
 
Archive::Zip - Provide an interface to ZIP archive files.
6
 
 
7
 
=head1 SYNOPSIS
8
 
 
9
 
 
10
 
   use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
11
 
   my $zip = Archive::Zip->new();
12
 
   my $member = $zip->addDirectory( 'dirname/' );
13
 
   $member = $zip->addString( 'This is a test', 'stringMember.txt' );
14
 
   $member->desiredCompressionMethod( COMPRESSION_DEFLATED );
15
 
   $member = $zip->addFile( 'xyz.pl', 'AnotherName.pl' );
16
 
   die 'write error' unless $zip->writeToFileNamed( 'someZip.zip' ) == AZ_OK;
17
 
   $zip = Archive::Zip->new();
18
 
   die 'read error' unless $zip->read( 'someZip.zip' ) == AZ_OK;
19
 
   $member = $zip->memberNamed( 'stringMember.txt' );
20
 
   $member->desiredCompressionMethod( COMPRESSION_STORED );
21
 
   die 'write error' unless $zip->writeToFileNamed( 'someOtherZip.zip' ) == AZ_OK;
22
 
 
23
 
=head1 DESCRIPTION
24
 
 
25
 
 
26
 
The Archive::Zip module allows a Perl program to create, manipulate, read,
27
 
and write Zip archive files. Zip archives can be created, or you can read
28
 
from existing zip files. Once created, they can be written to files, streams,
29
 
or strings. Members can be added, removed, extracted, replaced, rearranged,
30
 
and enumerated. They can also be renamed or have their dates, comments, or
31
 
other attributes queried or modified. Their data can be compressed or
32
 
uncompressed as needed. Members can be created from members in existing Zip
33
 
files, or from existing directories, files, or strings. This module uses the
34
 
L<Compress::Zlib|Compress::Zlib> library to read and write the compressed
35
 
streams inside the files.
36
 
 
37
 
=head1 FILE NAMING
38
 
 
39
 
 
40
 
Regardless of what your local file system uses for file naming, names in a
41
 
Zip file are in Unix format (I<forward> slashes (/) separating directory
42
 
names, etc.).
43
 
C<Archive::Zip> tries to be consistent with file naming
44
 
conventions, and will
45
 
translate back and forth between native and Zip file names.
46
 
However, it can't guess which format names are in. So two rules control what
47
 
kind of file name you must pass various routines:
48
 
 
49
 
=over 4
50
 
 
51
 
=item Names of files are in local format.
52
 
 
53
 
 
54
 
 
55
 
C<File::Spec> and C<File::Basename> are used for various file
56
 
operations. When you're referring to a file on your system, use its
57
 
file naming conventions.
58
 
 
59
 
=item Names of archive members are in Unix format.
60
 
 
61
 
 
62
 
 
63
 
This applies to every method that refers to an archive member, or
64
 
provides a name for new archive members. The C<extract()> methods
65
 
that can take one or two names will convert from local to zip names
66
 
if you call them with a single name.
67
 
 
68
 
=back
69
 
 
70
 
=head1 OBJECT MODEL
71
 
 
72
 
 
73
 
=head2 Overview
74
 
 
75
 
 
76
 
Archive::Zip::Archive objects are what you ordinarily deal with.
77
 
These maintain the structure of a zip file, without necessarily
78
 
holding data. When a zip is read from a disk file, the (possibly
79
 
compressed) data still lives in the file, not in memory. Archive
80
 
members hold information about the individual members, but not
81
 
(usually) the actual member data. When the zip is written to a
82
 
(different) file, the member data is compressed or copied as needed.
83
 
It is possible to make archive members whose data is held in a string
84
 
in memory, but this is not done when a zip file is read. Directory
85
 
members don't have any data.
86
 
 
87
 
=head2 Inheritance
88
 
 
89
 
 
90
 
  Exporter
91
 
   Archive::Zip                            Common base class, has defs.
92
 
       Archive::Zip::Archive               A Zip archive.
93
 
       Archive::Zip::Member                Abstract superclass for all members.
94
 
           Archive::Zip::StringMember      Member made from a string
95
 
           Archive::Zip::FileMember        Member made from an external file
96
 
               Archive::Zip::ZipFileMember Member that lives in a zip file
97
 
               Archive::Zip::NewFileMember Member whose data is in a file
98
 
           Archive::Zip::DirectoryMember   Member that is a directory
99
 
 
100
 
=head1 EXPORTS
101
 
 
102
 
 
103
 
=over 4
104
 
 
105
 
=item :CONSTANTS
106
 
 
107
 
 
108
 
 
109
 
Exports the following constants: FA_MSDOS FA_UNIX GPBF_ENCRYPTED_MASK
110
 
GPBF_DEFLATING_COMPRESSION_MASK GPBF_HAS_DATA_DESCRIPTOR_MASK
111
 
COMPRESSION_STORED COMPRESSION_DEFLATED IFA_TEXT_FILE_MASK
112
 
IFA_TEXT_FILE IFA_BINARY_FILE COMPRESSION_LEVEL_NONE
113
 
COMPRESSION_LEVEL_DEFAULT COMPRESSION_LEVEL_FASTEST
114
 
COMPRESSION_LEVEL_BEST_COMPRESSION
115
 
 
116
 
=item :MISC_CONSTANTS
117
 
 
118
 
 
119
 
 
120
 
Exports the following constants (only necessary for extending the
121
 
module): FA_AMIGA FA_VAX_VMS FA_VM_CMS FA_ATARI_ST FA_OS2_HPFS
122
 
FA_MACINTOSH FA_Z_SYSTEM FA_CPM FA_WINDOWS_NTFS
123
 
GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK
124
 
GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK
125
 
GPBF_IS_COMPRESSED_PATCHED_DATA_MASK COMPRESSION_SHRUNK
126
 
DEFLATING_COMPRESSION_NORMAL DEFLATING_COMPRESSION_MAXIMUM
127
 
DEFLATING_COMPRESSION_FAST DEFLATING_COMPRESSION_SUPER_FAST
128
 
COMPRESSION_REDUCED_1 COMPRESSION_REDUCED_2 COMPRESSION_REDUCED_3
129
 
COMPRESSION_REDUCED_4 COMPRESSION_IMPLODED COMPRESSION_TOKENIZED
130
 
COMPRESSION_DEFLATED_ENHANCED
131
 
COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED
132
 
 
133
 
=item :ERROR_CODES
134
 
 
135
 
 
136
 
 
137
 
Explained below. Returned from most methods. AZ_OK AZ_STREAM_END
138
 
AZ_ERROR AZ_FORMAT_ERROR AZ_IO_ERROR
139
 
 
140
 
=back
141
 
 
142
 
=head1 ERROR CODES
143
 
 
144
 
 
145
 
Many of the methods in Archive::Zip return error codes. These are implemented
146
 
as inline subroutines, using the C<use constant> pragma. They can be imported
147
 
into your namespace using the C<:ERROR_CODES> tag:
148
 
 
149
 
  use Archive::Zip qw( :ERROR_CODES );
150
 
  ...
151
 
  die "whoops!" unless $zip->read( 'myfile.zip' ) == AZ_OK;
152
 
 
153
 
=over 4
154
 
 
155
 
=item AZ_OK (0)
156
 
 
157
 
 
158
 
 
159
 
Everything is fine.
160
 
 
161
 
=item AZ_STREAM_END (1)
162
 
 
163
 
 
164
 
 
165
 
The read stream (or central directory) ended normally.
166
 
 
167
 
=item AZ_ERROR (2)
168
 
 
169
 
 
170
 
 
171
 
There was some generic kind of error.
172
 
 
173
 
=item AZ_FORMAT_ERROR (3)
174
 
 
175
 
 
176
 
 
177
 
There is a format error in a ZIP file being read.
178
 
 
179
 
=item AZ_IO_ERROR (4)
180
 
 
181
 
 
182
 
 
183
 
There was an IO error.
184
 
 
185
 
=back
186
 
 
187
 
=head1 COMPRESSION
188
 
 
189
 
 
190
 
Archive::Zip allows each member of a ZIP file to be compressed (using the
191
 
Deflate algorithm) or uncompressed. Other compression algorithms that some
192
 
versions of ZIP have been able to produce are not supported. Each member has
193
 
two compression methods: the one it's stored as (this is always
194
 
COMPRESSION_STORED for string and external file members), and the one you
195
 
desire for the member in the zip file. These can be different, of course, so
196
 
you can make a zip member that is not compressed out of one that is, and vice
197
 
versa. You can inquire about the current compression and set the desired
198
 
compression method:
199
 
 
200
 
  my $member = $zip->memberNamed( 'xyz.txt' );
201
 
  $member->compressionMethod();    # return current compression
202
 
  # set to read uncompressed
203
 
  $member->desiredCompressionMethod( COMPRESSION_STORED );
204
 
  # set to read compressed
205
 
  $member->desiredCompressionMethod( COMPRESSION_DEFLATED );
206
 
 
207
 
There are two different compression methods:
208
 
 
209
 
=over 4
210
 
 
211
 
=item COMPRESSION_STORED
212
 
 
213
 
 
214
 
 
215
 
file is stored (no compression)
216
 
 
217
 
=item COMPRESSION_DEFLATED
218
 
 
219
 
 
220
 
 
221
 
file is Deflated
222
 
 
223
 
=back
224
 
 
225
 
=head2 Compression Levels
226
 
 
227
 
 
228
 
If a member's desiredCompressionMethod is COMPRESSION_DEFLATED, you
229
 
can choose different compression levels. This choice may affect the
230
 
speed of compression and decompression, as well as the size of the
231
 
compressed member data.
232
 
 
233
 
  $member->desiredCompressionLevel( 9 );
234
 
 
235
 
The levels given can be:
236
 
 
237
 
=over 4
238
 
 
239
 
=item 0 or COMPRESSION_LEVEL_NONE
240
 
 
241
 
 
242
 
 
243
 
This is the same as saying
244
 
 
245
 
  $member->desiredCompressionMethod( COMPRESSION_STORED );
246
 
 
247
 
=item 1 .. 9
248
 
 
249
 
 
250
 
 
251
 
1 gives the best speed and worst compression, and 9 gives the
252
 
best compression and worst speed.
253
 
 
254
 
=item COMPRESSION_LEVEL_FASTEST
255
 
 
256
 
 
257
 
 
258
 
This is a synonym for level 1.
259
 
 
260
 
=item COMPRESSION_LEVEL_BEST_COMPRESSION
261
 
 
262
 
 
263
 
 
264
 
This is a synonym for level 9.
265
 
 
266
 
=item COMPRESSION_LEVEL_DEFAULT
267
 
 
268
 
 
269
 
 
270
 
This gives a good compromise between speed and compression,
271
 
and is currently equivalent to 6 (this is in the zlib code).
272
 
This is the level that will be used if not specified.
273
 
 
274
 
=back
275
 
 
276
 
=head1 Archive::Zip methods
277
 
 
278
 
 
279
 
The Archive::Zip class (and its invisible subclass Archive::Zip::Archive)
280
 
implement generic zip file functionality. Creating a new Archive::Zip object
281
 
actually makes an Archive::Zip::Archive object, but you don't have to worry
282
 
about this unless you're subclassing.
283
 
 
284
 
=head2 Constructor
285
 
 
286
 
 
287
 
=over 4
288
 
 
289
 
=item new( [$fileName] )
290
 
 
291
 
 
292
 
 
293
 
Make a new, empty zip archive.
294
 
 
295
 
    my $zip = Archive::Zip->new();
296
 
 
297
 
If an additional argument is passed, new() will call read()
298
 
to read the contents of an archive:
299
 
 
300
 
    my $zip = Archive::Zip->new( 'xyz.zip' );
301
 
 
302
 
If a filename argument is passed and the read fails for any
303
 
reason, new will return undef. For this reason, it may be
304
 
better to call read separately.
305
 
 
306
 
=back
307
 
 
308
 
=head2 Zip Archive Utility Methods
309
 
 
310
 
 
311
 
These Archive::Zip methods may be called as functions or as object
312
 
methods. Do not call them as class methods:
313
 
 
314
 
    $zip = Archive::Zip->new();
315
 
    $crc = Archive::Zip::computeCRC32( 'ghijkl' );    # OK
316
 
    $crc = $zip->computeCRC32( 'ghijkl' );            # also OK
317
 
    $crc = Archive::Zip->computeCRC32( 'ghijkl' );    # NOT OK
318
 
 
319
 
=over 4
320
 
 
321
 
=item Archive::Zip::computeCRC32( $string [, $crc] )
322
 
 
323
 
 
324
 
 
325
 
This is a utility function that uses the Compress::Zlib CRC
326
 
routine to compute a CRC-32. You can get the CRC of a string:
327
 
 
328
 
    $crc = Archive::Zip::computeCRC32( $string );
329
 
 
330
 
Or you can compute the running CRC:
331
 
 
332
 
    $crc = 0;
333
 
    $crc = Archive::Zip::computeCRC32( 'abcdef', $crc );
334
 
    $crc = Archive::Zip::computeCRC32( 'ghijkl', $crc );
335
 
 
336
 
=item Archive::Zip::setChunkSize( $number )
337
 
 
338
 
 
339
 
 
340
 
Report or change chunk size used for reading and writing.
341
 
This can make big differences in dealing with large files.
342
 
Currently, this defaults to 32K. This also changes the chunk
343
 
size used for Compress::Zlib. You must call setChunkSize()
344
 
before reading or writing. This is not exportable, so you
345
 
must call it like:
346
 
 
347
 
    Archive::Zip::setChunkSize( 4096 );
348
 
 
349
 
or as a method on a zip (though this is a global setting).
350
 
Returns old chunk size.
351
 
 
352
 
=item Archive::Zip::chunkSize()
353
 
 
354
 
 
355
 
 
356
 
Returns the current chunk size:
357
 
 
358
 
    my $chunkSize = Archive::Zip::chunkSize();
359
 
 
360
 
=item Archive::Zip::setErrorHandler( \&subroutine )
361
 
 
362
 
 
363
 
 
364
 
Change the subroutine called with error strings. This
365
 
defaults to \&Carp::carp, but you may want to change it to
366
 
get the error strings. This is not exportable, so you must
367
 
call it like:
368
 
 
369
 
    Archive::Zip::setErrorHandler( \&myErrorHandler );
370
 
 
371
 
If myErrorHandler is undef, resets handler to default.
372
 
Returns old error handler. Note that if you call Carp::carp
373
 
or a similar routine or if you're chaining to the default
374
 
error handler from your error handler, you may want to
375
 
increment the number of caller levels that are skipped (do
376
 
not just set it to a number):
377
 
 
378
 
    $Carp::CarpLevel++;
379
 
 
380
 
=item Archive::Zip::tempFile( [$tmpdir] )
381
 
 
382
 
 
383
 
 
384
 
Create a uniquely named temp file. It will be returned open
385
 
for read/write. If C<$tmpdir> is given, it is used as the
386
 
name of a directory to create the file in. If not given,
387
 
creates the file using C<File::Spec::tmpdir()>. Generally, you can
388
 
override this choice using the
389
 
 
390
 
    $ENV{TMPDIR}
391
 
 
392
 
environment variable. But see the L<File::Spec|File::Spec>
393
 
documentation for your system. Note that on many systems, if you're
394
 
running in taint mode, then you must make sure that C<$ENV{TMPDIR}> is
395
 
untainted for it to be used.
396
 
Will I<NOT> create C<$tmpdir> if it doesn't exist (this is a change
397
 
from prior versions!). Returns file handle and name:
398
 
 
399
 
    my ($fh, $name) = Archive::Zip::tempFile();
400
 
    my ($fh, $name) = Archive::Zip::tempFile('myTempDir');
401
 
    my $fh = Archive::Zip::tempFile();  # if you don't need the name
402
 
 
403
 
=back
404
 
 
405
 
=head2 Zip Archive Accessors
406
 
 
407
 
 
408
 
=over 4
409
 
 
410
 
=item members()
411
 
 
412
 
 
413
 
 
414
 
Return a copy of the members array
415
 
 
416
 
    my @members = $zip->members();
417
 
 
418
 
=item numberOfMembers()
419
 
 
420
 
 
421
 
 
422
 
Return the number of members I have
423
 
 
424
 
=item memberNames()
425
 
 
426
 
 
427
 
 
428
 
Return a list of the (internal) file names of the zip members
429
 
 
430
 
=item memberNamed( $string )
431
 
 
432
 
 
433
 
 
434
 
Return ref to member whose filename equals given filename or
435
 
undef. C<$string> must be in Zip (Unix) filename format.
436
 
 
437
 
=item membersMatching( $regex )
438
 
 
439
 
 
440
 
 
441
 
Return array of members whose filenames match given regular
442
 
expression in list context. Returns number of matching
443
 
members in scalar context.
444
 
 
445
 
    my @textFileMembers = $zip->membersMatching( '.*\.txt' );
446
 
    # or
447
 
    my $numberOfTextFiles = $zip->membersMatching( '.*\.txt' );
448
 
 
449
 
=item diskNumber()
450
 
 
451
 
 
452
 
 
453
 
Return the disk that I start on. Not used for writing zips,
454
 
but might be interesting if you read a zip in. This should be
455
 
0, as Archive::Zip does not handle multi-volume archives.
456
 
 
457
 
=item diskNumberWithStartOfCentralDirectory()
458
 
 
459
 
 
460
 
 
461
 
Return the disk number that holds the beginning of the
462
 
central directory. Not used for writing zips, but might be
463
 
interesting if you read a zip in. This should be 0, as
464
 
Archive::Zip does not handle multi-volume archives.
465
 
 
466
 
=item numberOfCentralDirectoriesOnThisDisk()
467
 
 
468
 
 
469
 
 
470
 
Return the number of CD structures in the zipfile last read in.
471
 
Not used for writing zips, but might be interesting if you read a zip
472
 
in.
473
 
 
474
 
=item numberOfCentralDirectories()
475
 
 
476
 
 
477
 
 
478
 
Return the number of CD structures in the zipfile last read in.
479
 
Not used for writing zips, but might be interesting if you read a zip
480
 
in.
481
 
 
482
 
=item centralDirectorySize()
483
 
 
484
 
 
485
 
 
486
 
Returns central directory size, as read from an external zip
487
 
file. Not used for writing zips, but might be interesting if
488
 
you read a zip in.
489
 
 
490
 
=item centralDirectoryOffsetWRTStartingDiskNumber()
491
 
 
492
 
 
493
 
 
494
 
Returns the offset into the zip file where the CD begins. Not
495
 
used for writing zips, but might be interesting if you read a
496
 
zip in.
497
 
 
498
 
=item zipfileComment( [$string] )
499
 
 
500
 
 
501
 
 
502
 
Get or set the zipfile comment. Returns the old comment.
503
 
 
504
 
    print $zip->zipfileComment();
505
 
    $zip->zipfileComment( 'New Comment' );
506
 
 
507
 
=item eocdOffset()
508
 
 
509
 
 
510
 
 
511
 
Returns the (unexpected) number of bytes between where the
512
 
EOCD was found and where it expected to be. This is normally
513
 
0, but would be positive if something (a virus, perhaps) had
514
 
added bytes somewhere before the EOCD. Not used for writing
515
 
zips, but might be interesting if you read a zip in. Here is
516
 
an example of how you can diagnose this:
517
 
 
518
 
  my $zip = Archive::Zip->new('somefile.zip');
519
 
  if ($zip->eocdOffset())
520
 
  {
521
 
    warn "A virus has added ", $zip->eocdOffset, " bytes of garbage\n";
522
 
  }
523
 
 
524
 
The C<eocdOffset()> is used to adjust the starting position of member
525
 
headers, if necessary.
526
 
 
527
 
=item fileName()
528
 
 
529
 
 
530
 
 
531
 
Returns the name of the file last read from. If nothing has
532
 
been read yet, returns an empty string; if read from a file
533
 
handle, returns the handle in string form.
534
 
 
535
 
=back
536
 
 
537
 
=head2 Zip Archive Member Operations
538
 
 
539
 
 
540
 
Various operations on a zip file modify members. When a member is
541
 
passed as an argument, you can either use a reference to the member
542
 
itself, or the name of a member. Of course, using the name requires
543
 
that names be unique within a zip (this is not enforced).
544
 
 
545
 
=over 4
546
 
 
547
 
=item removeMember( $memberOrName )
548
 
 
549
 
 
550
 
 
551
 
Remove and return the given member, or match its name and
552
 
remove it. Returns undef if member or name doesn't exist in this
553
 
Zip. No-op if member does not belong to this zip.
554
 
 
555
 
=item replaceMember( $memberOrName, $newMember )
556
 
 
557
 
 
558
 
 
559
 
Remove and return the given member, or match its name and
560
 
remove it. Replace with new member. Returns undef if member or
561
 
name doesn't exist in this Zip, or if C<$newMember> is undefined.
562
 
 
563
 
 
564
 
It is an (undiagnosed) error to provide a C<$newMember> that is a
565
 
member of the zip being modified.
566
 
 
567
 
    my $member1 = $zip->removeMember( 'xyz' );
568
 
    my $member2 = $zip->replaceMember( 'abc', $member1 );
569
 
    # now, $member2 (named 'abc') is not in $zip,
570
 
    # and $member1 (named 'xyz') is, having taken $member2's place.
571
 
 
572
 
=item extractMember( $memberOrName [, $extractedName ] )
573
 
 
574
 
 
575
 
 
576
 
Extract the given member, or match its name and extract it.
577
 
Returns undef if member doesn't exist in this Zip. If
578
 
optional second arg is given, use it as the name of the
579
 
extracted member. Otherwise, the internal filename of the
580
 
member is used as the name of the extracted file or
581
 
directory.
582
 
If you pass C<$extractedName>, it should be in the local file
583
 
system's format.
584
 
All necessary directories will be created. Returns C<AZ_OK>
585
 
on success.
586
 
 
587
 
=item extractMemberWithoutPaths( $memberOrName [, $extractedName ] )
588
 
 
589
 
 
590
 
 
591
 
Extract the given member, or match its name and extract it.
592
 
Does not use path information (extracts into the current
593
 
directory). Returns undef if member doesn't exist in this
594
 
Zip.
595
 
If optional second arg is given, use it as the name of the
596
 
extracted member (its paths will be deleted too). Otherwise,
597
 
the internal filename of the member (minus paths) is used as
598
 
the name of the extracted file or directory. Returns C<AZ_OK>
599
 
on success.
600
 
 
601
 
=item addMember( $member )
602
 
 
603
 
 
604
 
 
605
 
Append a member (possibly from another zip file) to the zip
606
 
file. Returns the new member. Generally, you will use
607
 
addFile(), addDirectory(), addFileOrDirectory(), addString(),
608
 
or read() to add members.
609
 
 
610
 
    # Move member named 'abc' to end of zip:
611
 
    my $member = $zip->removeMember( 'abc' );
612
 
    $zip->addMember( $member );
613
 
 
614
 
=item updateMember( $memberOrName, $fileName )
615
 
 
616
 
 
617
 
 
618
 
Update a single member from the file or directory named C<$fileName>.
619
 
Returns the (possibly added or updated) member, if any; C<undef> on
620
 
errors.
621
 
The comparison is based on C<lastModTime()> and (in the case of a
622
 
non-directory) the size of the file.
623
 
 
624
 
=item addFile( $fileName [, $newName ] )
625
 
 
626
 
 
627
 
 
628
 
Append a member whose data comes from an external file,
629
 
returning the member or undef. The member will have its file
630
 
name set to the name of the external file, and its
631
 
desiredCompressionMethod set to COMPRESSION_DEFLATED. The
632
 
file attributes and last modification time will be set from
633
 
the file.
634
 
If the name given does not represent a readable plain file or
635
 
symbolic link, undef will be returned. C<$fileName> must be
636
 
in the format required for the local file system.
637
 
The optional C<$newName> argument sets the internal file name
638
 
to something different than the given $fileName. C<$newName>,
639
 
if given, must be in Zip name format (i.e. Unix).
640
 
The text mode bit will be set if the contents appears to be
641
 
text (as returned by the C<-T> perl operator).
642
 
 
643
 
 
644
 
I<NOTE> that you shouldn't (generally) use absolute path names
645
 
in zip member names, as this will cause problems with some zip
646
 
tools as well as introduce a security hole and make the zip
647
 
harder to use.
648
 
 
649
 
=item addDirectory( $directoryName [, $fileName ] )
650
 
 
651
 
 
652
 
 
653
 
Append a member created from the given directory name. The
654
 
directory name does not have to name an existing directory.
655
 
If the named directory exists, the file modification time and
656
 
permissions are set from the existing directory, otherwise
657
 
they are set to now and permissive default permissions.
658
 
C<$directoryName> must be in local file system format.
659
 
The optional second argument sets the name of the archive
660
 
member (which defaults to C<$directoryName>). If given, it
661
 
must be in Zip (Unix) format.
662
 
Returns the new member.
663
 
 
664
 
=item addFileOrDirectory( $name [, $newName ] )
665
 
 
666
 
 
667
 
 
668
 
Append a member from the file or directory named $name. If
669
 
$newName is given, use it for the name of the new member.
670
 
Will add or remove trailing slashes from $newName as needed.
671
 
C<$name> must be in local file system format.
672
 
The optional second argument sets the name of the archive
673
 
member (which defaults to C<$name>). If given, it must be in
674
 
Zip (Unix) format.
675
 
 
676
 
=item addString( $stringOrStringRef, $name )
677
 
 
678
 
 
679
 
 
680
 
Append a member created from the given string or string
681
 
reference. The name is given by the second argument.
682
 
Returns the new member. The last modification time will be
683
 
set to now, and the file attributes will be set to permissive
684
 
defaults.
685
 
 
686
 
    my $member = $zip->addString( 'This is a test', 'test.txt' );
687
 
 
688
 
=item contents( $memberOrMemberName [, $newContents ] )
689
 
 
690
 
 
691
 
 
692
 
Returns the uncompressed data for a particular member, or
693
 
undef.
694
 
 
695
 
    print "xyz.txt contains " . $zip->contents( 'xyz.txt' );
696
 
 
697
 
Also can change the contents of a member:
698
 
 
699
 
    $zip->contents( 'xyz.txt', 'This is the new contents' );
700
 
 
701
 
If called expecting an array as the return value, it will include
702
 
the status as the second value in the array.
703
 
 
704
 
    ($content, $status) = $zip->contents( 'xyz.txt');
705
 
 
706
 
=back
707
 
 
708
 
=head2 Zip Archive I/O operations
709
 
 
710
 
 
711
 
A Zip archive can be written to a file or file handle, or read from
712
 
one.
713
 
 
714
 
=over 4
715
 
 
716
 
=item writeToFileNamed( $fileName )
717
 
 
718
 
 
719
 
 
720
 
Write a zip archive to named file. Returns C<AZ_OK> on
721
 
success.
722
 
 
723
 
    my $status = $zip->writeToFileNamed( 'xx.zip' );
724
 
    die "error somewhere" if $status != AZ_OK;
725
 
 
726
 
Note that if you use the same name as an existing zip file
727
 
that you read in, you will clobber ZipFileMembers. So
728
 
instead, write to a different file name, then delete the
729
 
original.
730
 
If you use the C<overwrite()> or C<overwriteAs()> methods, you can
731
 
re-write the original zip in this way.
732
 
C<$fileName> should be a valid file name on your system.
733
 
 
734
 
=item writeToFileHandle( $fileHandle [, $seekable] )
735
 
 
736
 
 
737
 
 
738
 
Write a zip archive to a file handle. Return AZ_OK on
739
 
success. The optional second arg tells whether or not to try
740
 
to seek backwards to re-write headers. If not provided, it is
741
 
set if the Perl C<-f> test returns true. This could fail on
742
 
some operating systems, though.
743
 
 
744
 
    my $fh = IO::File->new( 'someFile.zip', 'w' );
745
 
    if ( $zip->writeToFileHandle( $fh ) != AZ_OK)
746
 
        {
747
 
                # error handling
748
 
        }
749
 
 
750
 
If you pass a file handle that is not seekable (like if
751
 
you're writing to a pipe or a socket), pass a false second
752
 
argument:
753
 
 
754
 
    my $fh = IO::File->new( '| cat > somefile.zip', 'w' );
755
 
    $zip->writeToFileHandle( $fh, 0 );   # fh is not seekable
756
 
 
757
 
If this method fails during the write of a member, that
758
 
member and all following it will return false from
759
 
C<wasWritten()>. See writeCentralDirectory() for a way to
760
 
deal with this.
761
 
If you want, you can write data to the file handle before
762
 
passing it to writeToFileHandle(); this could be used (for
763
 
instance) for making self-extracting archives. However, this
764
 
only works reliably when writing to a real file (as opposed
765
 
to STDOUT or some other possible non-file).
766
 
See examples/selfex.pl for how to write a self-extracting
767
 
archive.
768
 
 
769
 
=item writeCentralDirectory( $fileHandle [, $offset ] )
770
 
 
771
 
 
772
 
 
773
 
Writes the central directory structure to the given file
774
 
handle. Returns AZ_OK on success. If given an $offset, will
775
 
seek to that point before writing. This can be used for
776
 
recovery in cases where writeToFileHandle or writeToFileNamed
777
 
returns an IO error because of running out of space on the
778
 
destination file. You can truncate the zip by seeking
779
 
backwards and then writing the directory:
780
 
 
781
 
    my $fh = IO::File->new( 'someFile.zip', 'w' );
782
 
        my $retval = $zip->writeToFileHandle( $fh );
783
 
    if ( $retval == AZ_IO_ERROR )
784
 
        {
785
 
                my @unwritten = grep { not $_->wasWritten() } $zip->members();
786
 
                if (@unwritten)
787
 
                {
788
 
                        $zip->removeMember( $member ) foreach my $member ( @unwritten );
789
 
                        $zip->writeCentralDirectory( $fh,
790
 
                                $unwritten[0]->writeLocalHeaderRelativeOffset());
791
 
                }
792
 
        }
793
 
 
794
 
=item overwriteAs( $newName )
795
 
 
796
 
 
797
 
 
798
 
Write the zip to the specified file, as safely as possible.
799
 
This is done by first writing to a temp file, then renaming
800
 
the original if it exists, then renaming the temp file, then
801
 
deleting the renamed original if it exists. Returns AZ_OK if
802
 
successful.
803
 
 
804
 
=item overwrite()
805
 
 
806
 
 
807
 
 
808
 
Write back to the original zip file. See overwriteAs() above.
809
 
If the zip was not ever read from a file, this generates an
810
 
error.
811
 
 
812
 
=item read( $fileName )
813
 
 
814
 
 
815
 
 
816
 
Read zipfile headers from a zip file, appending new members.
817
 
Returns C<AZ_OK> or error code.
818
 
 
819
 
    my $zipFile = Archive::Zip->new();
820
 
    my $status = $zipFile->read( '/some/FileName.zip' );
821
 
 
822
 
=item readFromFileHandle( $fileHandle, $filename )
823
 
 
824
 
 
825
 
 
826
 
Read zipfile headers from an already-opened file handle,
827
 
appending new members. Does not close the file handle.
828
 
Returns C<AZ_OK> or error code. Note that this requires a
829
 
seekable file handle; reading from a stream is not yet
830
 
supported.
831
 
 
832
 
    my $fh = IO::File->new( '/some/FileName.zip', 'r' );
833
 
    my $zip1 = Archive::Zip->new();
834
 
    my $status = $zip1->readFromFileHandle( $fh );
835
 
    my $zip2 = Archive::Zip->new();
836
 
    $status = $zip2->readFromFileHandle( $fh );
837
 
 
838
 
=back
839
 
 
840
 
=head2 Zip Archive Tree operations
841
 
 
842
 
 
843
 
These used to be in Archive::Zip::Tree but got moved into
844
 
Archive::Zip. They enable operation on an entire tree of members or
845
 
files.
846
 
A usage example:
847
 
 
848
 
  use Archive::Zip;
849
 
  my $zip = Archive::Zip->new();
850
 
  # add all readable files and directories below . as xyz/*
851
 
  $zip->addTree( '.', 'xyz' );  
852
 
  # add all readable plain files below /abc as def/*
853
 
  $zip->addTree( '/abc', 'def', sub { -f && -r } );     
854
 
  # add all .c files below /tmp as stuff/*
855
 
  $zip->addTreeMatching( '/tmp', 'stuff', '\.c$' );
856
 
  # add all .o files below /tmp as stuff/* if they aren't writable
857
 
  $zip->addTreeMatching( '/tmp', 'stuff', '\.o$', sub { ! -w } );
858
 
  # add all .so files below /tmp that are smaller than 200 bytes as stuff/*
859
 
  $zip->addTreeMatching( '/tmp', 'stuff', '\.o$', sub { -s < 200 } );
860
 
  # and write them into a file
861
 
  $zip->writeToFileNamed('xxx.zip');
862
 
  # now extract the same files into /tmpx
863
 
  $zip->extractTree( 'stuff', '/tmpx' );
864
 
 
865
 
=over 4
866
 
 
867
 
=item $zip->addTree( $root, $dest [,$pred] ) -- Add tree of files to a zip
868
 
 
869
 
 
870
 
 
871
 
C<$root> is the root of the tree of files and directories to be
872
 
added. It is a valid directory name on your system. C<$dest> is
873
 
the name for the root in the zip file (undef or blank means
874
 
to use relative pathnames). It is a valid ZIP directory name
875
 
(that is, it uses forward slashes (/) for separating
876
 
directory components). C<$pred> is an optional subroutine
877
 
reference to select files: it is passed the name of the
878
 
prospective file or directory using C<$_>, and if it returns
879
 
true, the file or directory will be included. The default is
880
 
to add all readable files and directories. For instance,
881
 
using
882
 
 
883
 
  my $pred = sub { /\.txt/ };
884
 
  $zip->addTree( '.', '', $pred );
885
 
 
886
 
will add all the .txt files in and below the current
887
 
directory, using relative names, and making the names
888
 
identical in the zipfile:
889
 
 
890
 
  original name           zip member name
891
 
  ./xyz                   xyz
892
 
  ./a/                    a/
893
 
  ./a/b                   a/b
894
 
 
895
 
To translate absolute to relative pathnames, just pass them
896
 
in: $zip->addTree( '/c/d', 'a' );
897
 
 
898
 
  original name           zip member name
899
 
  /c/d/xyz                a/xyz
900
 
  /c/d/a/                 a/a/
901
 
  /c/d/a/b                a/a/b
902
 
 
903
 
Returns AZ_OK on success. Note that this will not follow
904
 
symbolic links to directories. Note also that this does not
905
 
check for the validity of filenames.
906
 
 
907
 
 
908
 
Note that you generally I<don't> want to make zip archive member names
909
 
absolute.
910
 
 
911
 
=item $zip->addTreeMatching( $root, $dest, $pattern [,$pred] )
912
 
 
913
 
 
914
 
 
915
 
$root is the root of the tree of files and directories to be
916
 
added $dest is the name for the root in the zip file (undef
917
 
means to use relative pathnames) $pattern is a (non-anchored)
918
 
regular expression for filenames to match $pred is an
919
 
optional subroutine reference to select files: it is passed
920
 
the name of the prospective file or directory in C<$_>, and
921
 
if it returns true, the file or directory will be included.
922
 
The default is to add all readable files and directories. To
923
 
add all files in and below the current dirctory whose names
924
 
end in C<.pl>, and make them extract into a subdirectory
925
 
named C<xyz>, do this:
926
 
 
927
 
  $zip->addTreeMatching( '.', 'xyz', '\.pl$' )
928
 
 
929
 
To add all I<writable> files in and below the dirctory named
930
 
C</abc> whose names end in C<.pl>, and make them extract into
931
 
a subdirectory named C<xyz>, do this:
932
 
 
933
 
  $zip->addTreeMatching( '/abc', 'xyz', '\.pl$', sub { -w } )
934
 
 
935
 
Returns AZ_OK on success. Note that this will not follow
936
 
symbolic links to directories.
937
 
 
938
 
=item $zip->updateTree( $root, [ $dest, [ $pred [, $mirror]]] );
939
 
 
940
 
 
941
 
 
942
 
Update a zip file from a directory tree.
943
 
 
944
 
C<updateTree()> takes the same arguments as C<addTree()>, but first
945
 
checks to see whether the file or directory already exists in the zip
946
 
file, and whether it has been changed.
947
 
 
948
 
If the fourth argument C<$mirror> is true, then delete all my members
949
 
if corresponding files weren't found.
950
 
 
951
 
 
952
 
Returns an error code or AZ_OK if all is well.
953
 
 
954
 
=item $zip->extractTree()
955
 
 
956
 
 
957
 
 
958
 
=item $zip->extractTree( $root )
959
 
 
960
 
 
961
 
 
962
 
=item $zip->extractTree( $root, $dest )
963
 
 
964
 
 
965
 
 
966
 
=item $zip->extractTree( $root, $dest, $volume )
967
 
 
968
 
 
969
 
 
970
 
If you don't give any arguments at all, will extract all the
971
 
files in the zip with their original names.
972
 
 
973
 
 
974
 
If you supply one argument for C<$root>, C<extractTree> will extract
975
 
all the members whose names start with C<$root> into the current
976
 
directory, stripping off C<$root> first.
977
 
C<$root> is in Zip (Unix) format.
978
 
For instance,
979
 
 
980
 
  $zip->extractTree( 'a' );
981
 
 
982
 
when applied to a zip containing the files:
983
 
a/x a/b/c ax/d/e d/e will extract:
984
 
 
985
 
 
986
 
a/x as ./x
987
 
 
988
 
 
989
 
a/b/c as ./b/c
990
 
 
991
 
 
992
 
If you give two arguments, C<extractTree> extracts all the members
993
 
whose names start with C<$root>. It will translate C<$root> into
994
 
C<$dest> to construct the destination file name.
995
 
C<$root> and C<$dest> are in Zip (Unix) format.
996
 
For instance,
997
 
 
998
 
   $zip->extractTree( 'a', 'd/e' );
999
 
 
1000
 
when applied to a zip containing the files:
1001
 
a/x a/b/c ax/d/e d/e will extract:
1002
 
 
1003
 
 
1004
 
a/x to d/e/x
1005
 
 
1006
 
 
1007
 
a/b/c to d/e/b/c and ignore ax/d/e and d/e
1008
 
 
1009
 
 
1010
 
If you give three arguments, C<extractTree> extracts all the members
1011
 
whose names start with C<$root>. It will translate C<$root> into
1012
 
C<$dest> to construct the destination file name, and then it will
1013
 
convert to local file system format, using C<$volume> as the name of
1014
 
the destination volume.
1015
 
 
1016
 
 
1017
 
C<$root> and C<$dest> are in Zip (Unix) format.
1018
 
 
1019
 
 
1020
 
C<$volume> is in local file system format.
1021
 
 
1022
 
 
1023
 
For instance, under Windows,
1024
 
 
1025
 
   $zip->extractTree( 'a', 'd/e', 'f:' );
1026
 
 
1027
 
when applied to a zip containing the files:
1028
 
a/x a/b/c ax/d/e d/e will extract:
1029
 
 
1030
 
 
1031
 
a/x to f:d/e/x
1032
 
 
1033
 
 
1034
 
a/b/c to f:d/e/b/c and ignore ax/d/e and d/e
1035
 
 
1036
 
 
1037
 
If you want absolute paths (the prior example used paths relative to
1038
 
the current directory on the destination volume, you can specify these
1039
 
in C<$dest>:
1040
 
 
1041
 
   $zip->extractTree( 'a', '/d/e', 'f:' );
1042
 
 
1043
 
when applied to a zip containing the files:
1044
 
a/x a/b/c ax/d/e d/e will extract:
1045
 
 
1046
 
 
1047
 
a/x to f:\d\e\x
1048
 
 
1049
 
 
1050
 
a/b/c to f:\d\e\b\c and ignore ax/d/e and d/e
1051
 
 
1052
 
Returns an error code or AZ_OK if everything worked OK.
1053
 
 
1054
 
=back
1055
 
 
1056
 
=head1 MEMBER OPERATIONS
1057
 
 
1058
 
 
1059
 
=head2 Member Class Methods
1060
 
 
1061
 
 
1062
 
Several constructors allow you to construct members without adding
1063
 
them to a zip archive. These work the same as the addFile(),
1064
 
addDirectory(), and addString() zip instance methods described above,
1065
 
but they don't add the new members to a zip.
1066
 
 
1067
 
=over 4
1068
 
 
1069
 
=item Archive::Zip::Member->newFromString( $stringOrStringRef [, $fileName] )
1070
 
 
1071
 
 
1072
 
 
1073
 
Construct a new member from the given string. Returns undef
1074
 
on error.
1075
 
 
1076
 
    my $member = Archive::Zip::Member->newFromString( 'This is a test',
1077
 
                                                 'xyz.txt' );
1078
 
 
1079
 
=item newFromFile( $fileName )
1080
 
 
1081
 
 
1082
 
 
1083
 
Construct a new member from the given file. Returns undef on
1084
 
error.
1085
 
 
1086
 
    my $member = Archive::Zip::Member->newFromFile( 'xyz.txt' );
1087
 
 
1088
 
=item newDirectoryNamed( $directoryName [, $zipname ] )
1089
 
 
1090
 
 
1091
 
 
1092
 
Construct a new member from the given directory.
1093
 
C<$directoryName> must be a valid name on your file system; it doesn't
1094
 
have to exist.
1095
 
 
1096
 
 
1097
 
If given, C<$zipname> will be the name of the zip member; it must be a
1098
 
valid Zip (Unix) name. If not given, it will be converted from
1099
 
C<$directoryName>.
1100
 
 
1101
 
 
1102
 
Returns undef on error.
1103
 
 
1104
 
    my $member = Archive::Zip::Member->newDirectoryNamed( 'CVS/' );
1105
 
 
1106
 
=back
1107
 
 
1108
 
=head2 Member Simple accessors
1109
 
 
1110
 
 
1111
 
These methods get (and/or set) member attribute values.
1112
 
 
1113
 
=over 4
1114
 
 
1115
 
=item versionMadeBy()
1116
 
 
1117
 
 
1118
 
 
1119
 
Gets the field from the member header.
1120
 
 
1121
 
=item fileAttributeFormat( [$format] )
1122
 
 
1123
 
 
1124
 
 
1125
 
Gets or sets the field from the member header. These are
1126
 
C<FA_*> values.
1127
 
 
1128
 
=item versionNeededToExtract()
1129
 
 
1130
 
 
1131
 
 
1132
 
Gets the field from the member header.
1133
 
 
1134
 
=item bitFlag()
1135
 
 
1136
 
 
1137
 
 
1138
 
Gets the general purpose bit field from the member header.
1139
 
This is where the C<GPBF_*> bits live.
1140
 
 
1141
 
=item compressionMethod()
1142
 
 
1143
 
 
1144
 
 
1145
 
Returns the member compression method. This is the method
1146
 
that is currently being used to compress the member data.
1147
 
This will be COMPRESSION_STORED for added string or file
1148
 
members, or any of the C<COMPRESSION_*> values for members
1149
 
from a zip file. However, this module can only handle members
1150
 
whose data is in COMPRESSION_STORED or COMPRESSION_DEFLATED
1151
 
format.
1152
 
 
1153
 
=item desiredCompressionMethod( [$method] )
1154
 
 
1155
 
 
1156
 
 
1157
 
Get or set the member's C<desiredCompressionMethod>. This is
1158
 
the compression method that will be used when the member is
1159
 
written. Returns prior desiredCompressionMethod. Only
1160
 
COMPRESSION_DEFLATED or COMPRESSION_STORED are valid
1161
 
arguments. Changing to COMPRESSION_STORED will change the
1162
 
member desiredCompressionLevel to 0; changing to
1163
 
COMPRESSION_DEFLATED will change the member
1164
 
desiredCompressionLevel to COMPRESSION_LEVEL_DEFAULT.
1165
 
 
1166
 
=item desiredCompressionLevel( [$method] )
1167
 
 
1168
 
 
1169
 
 
1170
 
Get or set the member's desiredCompressionLevel This is the
1171
 
method that will be used to write. Returns prior
1172
 
desiredCompressionLevel. Valid arguments are 0 through 9,
1173
 
COMPRESSION_LEVEL_NONE, COMPRESSION_LEVEL_DEFAULT,
1174
 
COMPRESSION_LEVEL_BEST_COMPRESSION, and
1175
 
COMPRESSION_LEVEL_FASTEST. 0 or COMPRESSION_LEVEL_NONE will
1176
 
change the desiredCompressionMethod to COMPRESSION_STORED.
1177
 
All other arguments will change the desiredCompressionMethod
1178
 
to COMPRESSION_DEFLATED.
1179
 
 
1180
 
=item externalFileName()
1181
 
 
1182
 
 
1183
 
 
1184
 
Return the member's external file name, if any, or undef.
1185
 
 
1186
 
=item fileName()
1187
 
 
1188
 
 
1189
 
 
1190
 
Get or set the member's internal filename. Returns the
1191
 
(possibly new) filename. Names will have backslashes
1192
 
converted to forward slashes, and will have multiple
1193
 
consecutive slashes converted to single ones.
1194
 
 
1195
 
=item lastModFileDateTime()
1196
 
 
1197
 
 
1198
 
 
1199
 
Return the member's last modification date/time stamp in
1200
 
MS-DOS format.
1201
 
 
1202
 
=item lastModTime()
1203
 
 
1204
 
 
1205
 
 
1206
 
Return the member's last modification date/time stamp,
1207
 
converted to unix localtime format.
1208
 
 
1209
 
    print "Mod Time: " . scalar( localtime( $member->lastModTime() ) );
1210
 
 
1211
 
=item setLastModFileDateTimeFromUnix()
1212
 
 
1213
 
 
1214
 
 
1215
 
Set the member's lastModFileDateTime from the given unix
1216
 
time.
1217
 
 
1218
 
    $member->setLastModFileDateTimeFromUnix( time() );
1219
 
 
1220
 
=item internalFileAttributes()
1221
 
 
1222
 
 
1223
 
 
1224
 
Return the internal file attributes field from the zip
1225
 
header. This is only set for members read from a zip file.
1226
 
 
1227
 
=item externalFileAttributes()
1228
 
 
1229
 
 
1230
 
 
1231
 
Return member attributes as read from the ZIP file. Note that
1232
 
these are NOT UNIX!
1233
 
 
1234
 
=item unixFileAttributes( [$newAttributes] )
1235
 
 
1236
 
 
1237
 
 
1238
 
Get or set the member's file attributes using UNIX file
1239
 
attributes. Returns old attributes.
1240
 
 
1241
 
    my $oldAttribs = $member->unixFileAttributes( 0666 );
1242
 
 
1243
 
Note that the return value has more than just the file
1244
 
permissions, so you will have to mask off the lowest bits for
1245
 
comparisions.
1246
 
 
1247
 
=item localExtraField( [$newField] )
1248
 
 
1249
 
 
1250
 
 
1251
 
Gets or sets the extra field that was read from the local
1252
 
header. This is not set for a member from a zip file until
1253
 
after the member has been written out. The extra field must
1254
 
be in the proper format.
1255
 
 
1256
 
=item cdExtraField( [$newField] )
1257
 
 
1258
 
 
1259
 
 
1260
 
Gets or sets the extra field that was read from the central
1261
 
directory header. The extra field must be in the proper
1262
 
format.
1263
 
 
1264
 
=item extraFields()
1265
 
 
1266
 
 
1267
 
 
1268
 
Return both local and CD extra fields, concatenated.
1269
 
 
1270
 
=item fileComment( [$newComment] )
1271
 
 
1272
 
 
1273
 
 
1274
 
Get or set the member's file comment.
1275
 
 
1276
 
=item hasDataDescriptor()
1277
 
 
1278
 
 
1279
 
 
1280
 
Get or set the data descriptor flag. If this is set, the
1281
 
local header will not necessarily have the correct data
1282
 
sizes. Instead, a small structure will be stored at the end
1283
 
of the member data with these values. This should be
1284
 
transparent in normal operation.
1285
 
 
1286
 
=item crc32()
1287
 
 
1288
 
 
1289
 
 
1290
 
Return the CRC-32 value for this member. This will not be set
1291
 
for members that were constructed from strings or external
1292
 
files until after the member has been written.
1293
 
 
1294
 
=item crc32String()
1295
 
 
1296
 
 
1297
 
 
1298
 
Return the CRC-32 value for this member as an 8 character
1299
 
printable hex string. This will not be set for members that
1300
 
were constructed from strings or external files until after
1301
 
the member has been written.
1302
 
 
1303
 
=item compressedSize()
1304
 
 
1305
 
 
1306
 
 
1307
 
Return the compressed size for this member. This will not be
1308
 
set for members that were constructed from strings or
1309
 
external files until after the member has been written.
1310
 
 
1311
 
=item uncompressedSize()
1312
 
 
1313
 
 
1314
 
 
1315
 
Return the uncompressed size for this member.
1316
 
 
1317
 
=item isEncrypted()
1318
 
 
1319
 
 
1320
 
 
1321
 
Return true if this member is encrypted. The Archive::Zip
1322
 
module does not currently create or extract encrypted
1323
 
members.
1324
 
 
1325
 
=item isTextFile( [$flag] )
1326
 
 
1327
 
 
1328
 
 
1329
 
Returns true if I am a text file. Also can set the status if
1330
 
given an argument (then returns old state). Note that this
1331
 
module does not currently do anything with this flag upon
1332
 
extraction or storage. That is, bytes are stored in native
1333
 
format whether or not they came from a text file.
1334
 
 
1335
 
=item isBinaryFile()
1336
 
 
1337
 
 
1338
 
 
1339
 
Returns true if I am a binary file. Also can set the status
1340
 
if given an argument (then returns old state). Note that this
1341
 
module does not currently do anything with this flag upon
1342
 
extraction or storage. That is, bytes are stored in native
1343
 
format whether or not they came from a text file.
1344
 
 
1345
 
=item extractToFileNamed( $fileName )
1346
 
 
1347
 
 
1348
 
 
1349
 
Extract me to a file with the given name. The file will be
1350
 
created with default modes. Directories will be created as
1351
 
needed.
1352
 
The C<$fileName> argument should be a valid file name on your
1353
 
file system.
1354
 
Returns AZ_OK on success.
1355
 
 
1356
 
=item isDirectory()
1357
 
 
1358
 
 
1359
 
 
1360
 
Returns true if I am a directory.
1361
 
 
1362
 
=item writeLocalHeaderRelativeOffset()
1363
 
 
1364
 
 
1365
 
 
1366
 
Returns the file offset in bytes the last time I was written.
1367
 
 
1368
 
=item wasWritten()
1369
 
 
1370
 
 
1371
 
 
1372
 
Returns true if I was successfully written. Reset at the
1373
 
beginning of a write attempt.
1374
 
 
1375
 
=back
1376
 
 
1377
 
=head2 Low-level member data reading
1378
 
 
1379
 
 
1380
 
It is possible to use lower-level routines to access member data
1381
 
streams, rather than the extract* methods and contents(). For
1382
 
instance, here is how to print the uncompressed contents of a member
1383
 
in chunks using these methods:
1384
 
 
1385
 
    my ( $member, $status, $bufferRef );
1386
 
    $member = $zip->memberNamed( 'xyz.txt' );
1387
 
    $member->desiredCompressionMethod( COMPRESSION_STORED );
1388
 
    $status = $member->rewindData();
1389
 
    die "error $status" unless $status == AZ_OK;
1390
 
    while ( ! $member->readIsDone() )
1391
 
    {
1392
 
    ( $bufferRef, $status ) = $member->readChunk();
1393
 
    die "error $status"
1394
 
                        if $status != AZ_OK && $status != AZ_STREAM_END;
1395
 
    # do something with $bufferRef:
1396
 
    print $$bufferRef;
1397
 
    }
1398
 
    $member->endRead();
1399
 
 
1400
 
=over 4
1401
 
 
1402
 
=item readChunk( [$chunkSize] )
1403
 
 
1404
 
 
1405
 
 
1406
 
This reads the next chunk of given size from the member's
1407
 
data stream and compresses or uncompresses it as necessary,
1408
 
returning a reference to the bytes read and a status. If size
1409
 
argument is not given, defaults to global set by
1410
 
Archive::Zip::setChunkSize. Status is AZ_OK on success until
1411
 
the last chunk, where it returns AZ_STREAM_END. Returns C<(
1412
 
\$bytes, $status)>.
1413
 
 
1414
 
    my ( $outRef, $status ) = $self->readChunk();
1415
 
    print $$outRef if $status != AZ_OK && $status != AZ_STREAM_END;
1416
 
 
1417
 
=item rewindData()
1418
 
 
1419
 
 
1420
 
 
1421
 
Rewind data and set up for reading data streams or writing
1422
 
zip files. Can take options for C<inflateInit()> or
1423
 
C<deflateInit()>, but this isn't likely to be necessary.
1424
 
Subclass overrides should call this method. Returns C<AZ_OK>
1425
 
on success.
1426
 
 
1427
 
=item endRead()
1428
 
 
1429
 
 
1430
 
 
1431
 
Reset the read variables and free the inflater or deflater.
1432
 
Must be called to close files, etc. Returns AZ_OK on success.
1433
 
 
1434
 
=item readIsDone()
1435
 
 
1436
 
 
1437
 
 
1438
 
Return true if the read has run out of data or errored out.
1439
 
 
1440
 
=item contents()
1441
 
 
1442
 
 
1443
 
 
1444
 
Return the entire uncompressed member data or undef in scalar
1445
 
context. When called in array context, returns C<( $string,
1446
 
$status )>; status will be AZ_OK on success:
1447
 
 
1448
 
    my $string = $member->contents();
1449
 
    # or
1450
 
    my ( $string, $status ) = $member->contents();
1451
 
    die "error $status" unless $status == AZ_OK;
1452
 
 
1453
 
Can also be used to set the contents of a member (this may
1454
 
change the class of the member):
1455
 
 
1456
 
    $member->contents( "this is my new contents" );
1457
 
 
1458
 
=item extractToFileHandle( $fh )
1459
 
 
1460
 
 
1461
 
 
1462
 
Extract (and uncompress, if necessary) the member's contents
1463
 
to the given file handle. Return AZ_OK on success.
1464
 
 
1465
 
=back
1466
 
 
1467
 
=head1 Archive::Zip::FileMember methods
1468
 
 
1469
 
 
1470
 
The Archive::Zip::FileMember class extends Archive::Zip::Member. It is the
1471
 
base class for both ZipFileMember and NewFileMember classes. This class adds
1472
 
an C<externalFileName> and an C<fh> member to keep track of the external
1473
 
file.
1474
 
 
1475
 
=over 4
1476
 
 
1477
 
=item externalFileName()
1478
 
 
1479
 
 
1480
 
 
1481
 
Return the member's external filename.
1482
 
 
1483
 
=item fh()
1484
 
 
1485
 
 
1486
 
 
1487
 
Return the member's read file handle. Automatically opens file if
1488
 
necessary.
1489
 
 
1490
 
=back
1491
 
 
1492
 
=head1 Archive::Zip::ZipFileMember methods
1493
 
 
1494
 
 
1495
 
The Archive::Zip::ZipFileMember class represents members that have been read
1496
 
from external zip files.
1497
 
 
1498
 
=over 4
1499
 
 
1500
 
=item diskNumberStart()
1501
 
 
1502
 
 
1503
 
 
1504
 
Returns the disk number that the member's local header resides in.
1505
 
Should be 0.
1506
 
 
1507
 
=item localHeaderRelativeOffset()
1508
 
 
1509
 
 
1510
 
 
1511
 
Returns the offset into the zip file where the member's local header
1512
 
is.
1513
 
 
1514
 
=item dataOffset()
1515
 
 
1516
 
 
1517
 
 
1518
 
Returns the offset from the beginning of the zip file to the member's
1519
 
data.
1520
 
 
1521
 
=back
1522
 
 
1523
 
=head1 REQUIRED MODULES
1524
 
 
1525
 
 
1526
 
L<Archive::Zip|Archive::Zip> requires several other modules:
1527
 
 
1528
 
 
1529
 
L<Carp|Carp>
1530
 
 
1531
 
 
1532
 
L<Compress::Zlib|Compress::Zlib>
1533
 
 
1534
 
 
1535
 
L<Cwd|Cwd>
1536
 
 
1537
 
 
1538
 
L<File::Basename|File::Basename>
1539
 
 
1540
 
 
1541
 
L<File::Copy|File::Copy>
1542
 
 
1543
 
 
1544
 
L<File::Find|File::Find>
1545
 
 
1546
 
 
1547
 
L<File::Path|File::Path>
1548
 
 
1549
 
 
1550
 
L<File::Spec|File::Spec>
1551
 
 
1552
 
 
1553
 
L<File::Spec|File::Spec>
1554
 
 
1555
 
 
1556
 
L<IO::File|IO::File>
1557
 
 
1558
 
 
1559
 
L<IO::Seekable|IO::Seekable>
1560
 
 
1561
 
 
1562
 
L<Time::Local|Time::Local>
1563
 
 
1564
 
 
1565
 
=head1 AUTHOR
1566
 
 
1567
 
 
1568
 
Ned Konz, <nedkonz@cpan.org>
1569
 
 
1570
 
=head1 CURRENT MAINTAINER
1571
 
 
1572
 
 
1573
 
Steve Peters, <steve@fisharerojo.org>
1574
 
 
1575
 
 
1576
 
File attributes code by Maurice Aubrey <maurice@lovelyfilth.com>
1577
 
 
1578
 
=head1 COPYRIGHT
1579
 
 
1580
 
 
1581
 
Copyright (c) 2000-2004 Ned Konz, 2005 Steve Peters. All rights reserved. 
1582
 
This program is free software; you can redistribute it and/or modify it
1583
 
under the same terms as Perl itself.
1584
 
 
1585
 
=head1 SEE ALSO
1586
 
 
1587
 
 
1588
 
L<Compress::Zlib>
1589
 
 
1590
 
 
1591
 
L<Archive::Tar>
1592
 
 
1593
 
 
1594
 
There is a Japanese translation of this
1595
 
document at L<http://www.memb.jp/~deq/perl/doc-ja/Archive-Zip.html> that
1596
 
was done by DEQ <deq@oct.zaq.ne.jp> . Thanks! 
1597