zip.html

来自「perl教程」· HTML 代码 · 共 1,222 行 · 第 1/5 页

HTML
1,222
字号
</dl>
<p>
</p>
<hr />
<h1><a name="error_codes">ERROR CODES</a></h1>
<p>Many of the methods in Archive::Zip return error codes. These are implemented
as inline subroutines, using the <code>use constant</code> pragma. They can be imported
into your namespace using the <a href="#item__3aerror_codes"><code>:ERROR_CODES</code></a> tag:</p>
<pre>
  <span class="keyword">use</span> <span class="variable">Archive::Zip</span> <span class="string">qw( :ERROR_CODES )</span><span class="operator">;</span>
  
  <span class="operator">...</span>
  
  <span class="keyword">unless</span> <span class="operator">(</span> <span class="variable">$zip</span><span class="operator">-&gt;</span><span class="keyword">read</span><span class="operator">(</span> <span class="string">'myfile.zip'</span> <span class="operator">)</span> <span class="operator">==</span> <span class="variable">AZ_OK</span> <span class="operator">)</span> <span class="operator">{</span>
      <span class="keyword">die</span> <span class="string">"whoops!"</span><span class="operator">;</span>
  <span class="operator">}</span>
</pre>
<dl>
<dt><strong><a name="item_az_ok">AZ_OK (0)</a></strong>

<dd>
<p>Everything is fine.</p>
</dd>
</li>
<dt><strong><a name="item_az_stream_end">AZ_STREAM_END (1)</a></strong>

<dd>
<p>The read stream (or central directory) ended normally.</p>
</dd>
</li>
<dt><strong><a name="item_az_error">AZ_ERROR (2)</a></strong>

<dd>
<p>There was some generic kind of error.</p>
</dd>
</li>
<dt><strong><a name="item_az_format_error">AZ_FORMAT_ERROR (3)</a></strong>

<dd>
<p>There is a format error in a ZIP file being read.</p>
</dd>
</li>
<dt><strong><a name="item_az_io_error">AZ_IO_ERROR (4)</a></strong>

<dd>
<p>There was an IO error.</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="compression">Compression</a></h2>
<p>Archive::Zip allows each member of a ZIP file to be compressed (using the
Deflate algorithm) or uncompressed.</p>
<p>Other compression algorithms that some versions of ZIP have been able to
produce are not supported. Each member has two compression methods: the
one it's stored as (this is always COMPRESSION_STORED for string and external
file members), and the one you desire for the member in the zip file.</p>
<p>These can be different, of course, so you can make a zip member that is not
compressed out of one that is, and vice versa.</p>
<p>You can inquire about the current compression and set the desired
compression method:</p>
<pre>
  <span class="keyword">my</span> <span class="variable">$member</span> <span class="operator">=</span> <span class="variable">$zip</span><span class="operator">-&gt;</span><span class="variable">memberNamed</span><span class="operator">(</span> <span class="string">'xyz.txt'</span> <span class="operator">);</span>
  <span class="variable">$member</span><span class="operator">-&gt;</span><span class="variable">compressionMethod</span><span class="operator">();</span>    <span class="comment"># return current compression</span>
  
  <span class="comment"># set to read uncompressed</span>
  <span class="variable">$member</span><span class="operator">-&gt;</span><span class="variable">desiredCompressionMethod</span><span class="operator">(</span> <span class="variable">COMPRESSION_STORED</span> <span class="operator">);</span>
  
  <span class="comment"># set to read compressed</span>
  <span class="variable">$member</span><span class="operator">-&gt;</span><span class="variable">desiredCompressionMethod</span><span class="operator">(</span> <span class="variable">COMPRESSION_DEFLATED</span> <span class="operator">);</span>
</pre>
<p>There are two different compression methods:</p>
<dl>
<dt><strong><a name="item_compression_stored">COMPRESSION_STORED</a></strong>

<dd>
<p>File is stored (no compression)</p>
</dd>
</li>
<dt><strong><a name="item_compression_deflated">COMPRESSION_DEFLATED</a></strong>

<dd>
<p>File is Deflated</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="compression_levels">Compression Levels</a></h2>
<p>If a member's desiredCompressionMethod is COMPRESSION_DEFLATED, you
can choose different compression levels. This choice may affect the
speed of compression and decompression, as well as the size of the
compressed member data.</p>
<pre>
  <span class="variable">$member</span><span class="operator">-&gt;</span><span class="variable">desiredCompressionLevel</span><span class="operator">(</span> <span class="number">9</span> <span class="operator">);</span>
</pre>
<p>The levels given can be:</p>
<ol>
<li><strong><a name="item_or_compression_level_none">or COMPRESSION_LEVEL_NONE</a></strong>

<p>This is the same as saying</p>
<pre>
  <span class="variable">$member</span><span class="operator">-&gt;</span><span class="variable">desiredCompressionMethod</span><span class="operator">(</span> <span class="variable">COMPRESSION_STORED</span> <span class="operator">);</span>
</pre>
</li>
<li><strong><a name="item__2e_2e_9">.. 9</a></strong>

<p>1 gives the best speed and worst compression, and 9 gives the
best compression and worst speed.</p>
</li>
<dt><strong><a name="item_compression_level_fastest">COMPRESSION_LEVEL_FASTEST</a></strong>

<dd>
<p>This is a synonym for level 1.</p>
</dd>
</li>
<dt><strong><a name="item_compression_level_best_compression">COMPRESSION_LEVEL_BEST_COMPRESSION</a></strong>

<dd>
<p>This is a synonym for level 9.</p>
</dd>
</li>
<dt><strong><a name="item_compression_level_default">COMPRESSION_LEVEL_DEFAULT</a></strong>

<dd>
<p>This gives a good compromise between speed and compression,
and is currently equivalent to 6 (this is in the zlib code).
This is the level that will be used if not specified.</p>
</dd>
</li>
</ol>
<p>
</p>
<hr />
<h1><a name="archive__zip_methods">Archive::Zip Methods</a></h1>
<p>The Archive::Zip class (and its invisible subclass Archive::Zip::Archive)
implement generic zip file functionality. Creating a new Archive::Zip object
actually makes an Archive::Zip::Archive object, but you don't have to worry
about this unless you're subclassing.</p>
<p>
</p>
<h2><a name="constructor">Constructor</a></h2>
<dl>
<dt><strong><a name="item_new">new( [$fileName] )</a></strong>

<dd>
<p>Make a new, empty zip archive.</p>
</dd>
<dd>
<pre>
    <span class="keyword">my</span> <span class="variable">$zip</span> <span class="operator">=</span> <span class="variable">Archive::Zip</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">();</span>
</pre>
</dd>
<dd>
<p>If an additional argument is passed, <a href="#item_new"><code>new()</code></a> will call <a href="#item_read"><code>read()</code></a>
to read the contents of an archive:</p>
</dd>
<dd>
<pre>
    <span class="keyword">my</span> <span class="variable">$zip</span> <span class="operator">=</span> <span class="variable">Archive::Zip</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">(</span> <span class="string">'xyz.zip'</span> <span class="operator">);</span>
</pre>
</dd>
<dd>
<p>If a filename argument is passed and the read fails for any
reason, new will return undef. For this reason, it may be
better to call read separately.</p>
</dd>
</li>
</dl>
<p>
</p>
<h2><a name="zip_archive_utility_methods">Zip Archive Utility Methods</a></h2>
<p>These Archive::Zip methods may be called as functions or as object
methods. Do not call them as class methods:</p>
<pre>
    <span class="variable">$zip</span> <span class="operator">=</span> <span class="variable">Archive::Zip</span><span class="operator">-&gt;</span><span class="variable">new</span><span class="operator">();</span>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">Archive::Zip::computeCRC32</span><span class="operator">(</span> <span class="string">'ghijkl'</span> <span class="operator">);</span>    <span class="comment"># OK</span>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">$zip</span><span class="operator">-&gt;</span><span class="variable">computeCRC32</span><span class="operator">(</span> <span class="string">'ghijkl'</span> <span class="operator">);</span>            <span class="comment"># also OK</span>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">Archive::Zip</span><span class="operator">-&gt;</span><span class="variable">computeCRC32</span><span class="operator">(</span> <span class="string">'ghijkl'</span> <span class="operator">);</span>    <span class="comment"># NOT OK</span>
</pre>
<dl>
<dt><strong><a name="item_computecrc32">Archive::Zip::computeCRC32( $string [, $crc] )</a></strong>

<dd>
<p>This is a utility function that uses the Compress::Zlib CRC
routine to compute a CRC-32. You can get the CRC of a string:</p>
</dd>
<dd>
<pre>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">Archive::Zip::computeCRC32</span><span class="operator">(</span> <span class="variable">$string</span> <span class="operator">);</span>
</pre>
</dd>
<dd>
<p>Or you can compute the running CRC:</p>
</dd>
<dd>
<pre>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="number">0</span><span class="operator">;</span>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">Archive::Zip::computeCRC32</span><span class="operator">(</span> <span class="string">'abcdef'</span><span class="operator">,</span> <span class="variable">$crc</span> <span class="operator">);</span>
    <span class="variable">$crc</span> <span class="operator">=</span> <span class="variable">Archive::Zip::computeCRC32</span><span class="operator">(</span> <span class="string">'ghijkl'</span><span class="operator">,</span> <span class="variable">$crc</span> <span class="operator">);</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_setchunksize">Archive::Zip::setChunkSize( $number )</a></strong>

<dd>
<p>Report or change chunk size used for reading and writing.
This can make big differences in dealing with large files.
Currently, this defaults to 32K. This also changes the chunk
size used for Compress::Zlib. You must call <a href="#item_setchunksize"><code>setChunkSize()</code></a>
before reading or writing. This is not exportable, so you
must call it like:</p>
</dd>
<dd>
<pre>
    <span class="variable">Archive::Zip::setChunkSize</span><span class="operator">(</span> <span class="number">4096</span> <span class="operator">);</span>
</pre>
</dd>
<dd>
<p>or as a method on a zip (though this is a global setting).
Returns old chunk size.</p>
</dd>
</li>
<dt><strong><a name="item_chunksize">Archive::Zip::chunkSize()</a></strong>

<dd>
<p>Returns the current chunk size:</p>
</dd>
<dd>
<pre>
    <span class="keyword">my</span> <span class="variable">$chunkSize</span> <span class="operator">=</span> <span class="variable">Archive::Zip::chunkSize</span><span class="operator">();</span>
</pre>
</dd>
</li>
<dt><strong><a name="item_seterrorhandler">Archive::Zip::setErrorHandler( \&amp;subroutine )</a></strong>

<dd>
<p>Change the subroutine called with error strings. This
defaults to \&amp;Carp::carp, but you may want to change it to
get the error strings. This is not exportable, so you must
call it like:</p>
</dd>
<dd>
<pre>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?