魏医生 發表於 2020-3-16 15:02:00

7-zip Delphi API

<pre class="prettyprint prettyprinted"><span class="pun">官网已经找不到了。<span class="pln">
<span class="pun">这个地址比较新<span class="pln">
<span class="pln">https<span class="pun">:<span class="com">//github.com/zedalaye/d7zip</span></span></span><span class="pln">
<span class="pun">在这个基础上<span class="pln"> <span class="pun">融合了<span class="pln">
<span class="typ">SevenZip<span class="pun">.<span class="pln">pas BUG<span class="pun">修改版<span class="pln"> <span class="pun">-<span class="pln"> <span class="lit">20160613<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">堕落恶魔<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">博客园<span class="pln">
<span class="pln">https<span class="pun">:<span class="com">//www.cnblogs.com/hs-kill/p/3876160.html</span></span></span><span class="pln">
<span class="pun">然后再加了一些小的修改。<span class="pln">

<span class="pun">最后,提供一个比较全面的<span class="pln"> <span class="pun">例子。<span class="pln">
<span class="pun">【<span class="wp_keywordlink_affiliate"><span class="typ">Delphi</span><span class="pun">】从内存读取或解压压缩文件(<span class="pln">RAR<span class="pun">、<span class="pln">ZIP<span class="pun">、<span class="pln">TAR<span class="pun">、<span class="pln">GZIP<span class="pun">等)(一)<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">峋山隐修会<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">博客园<span class="pln">
<span class="pln">http<span class="pun">:<span class="com">//www.cnblogs.com/caibirdy1985/archive/2013/05/13/4232949.html</span></span></span><span class="pln">
<span class="pun">【<span class="wp_keywordlink_affiliate"><span class="typ">Delphi</span><span class="pun">】从内存读取或解压压缩文件(<span class="pln">RAR<span class="pun">、<span class="pln">ZIP<span class="pun">、<span class="pln">TAR<span class="pun">、<span class="pln">GZIP<span class="pun">等)(二)<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">峋山隐修会<span class="pln"> <span class="pun">-<span class="pln"> <span class="pun">博客园<span class="pln">
<span class="pln">http<span class="pun">:<span class="com">//www.cnblogs.com/caibirdy1985/archive/2013/05/14/4232948.html</span></span></span><span class="pln">



<span class="lit">7<span class="pun">-<span class="pln">zip <span class="wp_keywordlink_affiliate"><span class="typ">Delphi</span><span class="pln"> API
<span class="typ">This<span class="pln"> API <span class="kwd">use<span class="pln"> the <span class="lit">7<span class="pun">-<span class="pln">zip dll <span class="pun">(<span class="lit">7z<span class="pun">.<span class="pln">dll<span class="pun">)<span class="pln"> to read <span class="kwd">and<span class="pln"> write all <span class="lit">7<span class="pun">-<span class="pln">zip supported archive formats<span class="pun">.<span class="pln">

<span class="pun">-<span class="pln"> <span class="typ">Autor<span class="pun">:<span class="pln"> <span class="typ">Henri<span class="pln"> <span class="typ">Gourvest<span class="pln"> <span class="pun">&lt;<span class="pln">hgourvest@progdigy<span class="pun">.<span class="pln">com<span class="pun">&gt;<span class="pln">
<span class="pun">-<span class="pln"> <span class="typ">Licence<span class="pun">:<span class="pln"> MPL1<span class="pun">.<span class="lit">1<span class="pln">
<span class="pun">-<span class="pln"> <span class="typ">Date<span class="pun">:<span class="pln"> <span class="lit">15<span class="pun">/<span class="lit">04<span class="pun">/<span class="lit">2009<span class="pln">
<span class="pun">-<span class="pln"> <span class="typ">Version<span class="pun">:<span class="pln"> <span class="lit">1.2<span class="pln">

<span class="typ">Reading<span class="pln"> archive<span class="pun">:<span class="pln">

<span class="typ">Extract<span class="pln"> to path<span class="pun">:<span class="pln">
<span class="pun">解压到目录:<span class="pln">
<span class="kwd">with<span class="pln"> <span class="typ">CreateInArchive<span class="pun">(<span class="pln">CLSID_CFormatZip<span class="pun">)<span class="pln"> <span class="kwd">do<span class="pln">
<span class="kwd">begin<span class="pln">
   <span class="typ">OpenFile<span class="pun">(<span class="str">'c:\test.zip'<span class="pun">);<span class="pln">
   <span class="typ">ExtractTo<span class="pun">(<span class="str">'c:\test'<span class="pun">);<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

<span class="typ">Get<span class="pln"> file list<span class="pun">:<span class="pln">
<span class="pun">获取文件列表:<span class="pln">
<span class="kwd">with<span class="pln"> <span class="typ">CreateInArchive<span class="pun">(<span class="pln">CLSID_CFormat7z<span class="pun">,<span class="pln"> <span class="str">'Formats\7z.dll'<span class="pun">)<span class="pln"> <span class="kwd">do<span class="pln">
<span class="kwd">begin<span class="pln">
   <span class="typ">OpenFile<span class="pun">(<span class="str">'c:\test.7z'<span class="pun">);<span class="pln">
   <span class="kwd">for<span class="pln"> i <span class="pun">:=<span class="pln"> <span class="lit">0<span class="pln"> to <span class="typ">NumberOfItems<span class="pln"> <span class="pun">-<span class="pln"> <span class="lit">1<span class="pln"> <span class="kwd">do<span class="pln">
   <span class="kwd">if<span class="pln"> <span class="kwd">not<span class="pln"> <span class="typ">ItemIsFolder<span class="pun">[<span class="pln">i<span class="pun">]<span class="pln"> <span class="kwd">then<span class="pln">
      <span class="typ">Writeln<span class="pun">(<span class="typ">ItemPath<span class="pun">[<span class="pln">i<span class="pun">]);<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

<span class="typ">Extract<span class="pln"> to stream
<span class="pun">解压到流:<span class="pln">
<span class="kwd">with<span class="pln"> <span class="typ">CreateInArchive<span class="pun">(<span class="pln">CLSID_CFormat7z<span class="pun">)<span class="pln"> <span class="kwd">do<span class="pln">
<span class="kwd">begin<span class="pln">
   <span class="typ">OpenFile<span class="pun">(<span class="str">'c:\test.7z'<span class="pun">);<span class="pln">
   <span class="kwd">for<span class="pln"> i <span class="pun">:=<span class="pln"> <span class="lit">0<span class="pln"> to <span class="typ">NumberOfItems<span class="pln"> <span class="pun">-<span class="pln"> <span class="lit">1<span class="pln"> <span class="kwd">do<span class="pln">
    <span class="kwd">if<span class="pln"> <span class="kwd">not<span class="pln"> <span class="typ">ItemIsFolder<span class="pun">[<span class="pln">i<span class="pun">]<span class="pln"> <span class="kwd">then<span class="pln">
       <span class="typ">ExtractItem<span class="pun">(<span class="pln">i<span class="pun">,<span class="pln"> stream<span class="pun">,<span class="pln"> <span class="kwd">false<span class="pun">);<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

<span class="typ">Extract<span class="pln"> <span class="str">"n"<span class="pln"> <span class="typ">Items<span class="pln">
<span class="pun">解压多项目:<span class="pln">
<span class="kwd">function<span class="pln"> <span class="typ">GetStreamCallBack<span class="pun">(<span class="pln">sender<span class="pun">:<span class="pln"> <span class="typ">Pointer<span class="pun">;<span class="pln"> index<span class="pun">:<span class="pln"> <span class="typ">Cardinal<span class="pun">;<span class="pln">
<span class="kwd">var<span class="pln"> outStream<span class="pun">:<span class="pln"> <span class="typ">ISequentialOutStream<span class="pun">):<span class="pln"> HRESULT<span class="pun">;<span class="pln"> stdcall<span class="pun">;<span class="pln">
<span class="kwd">begin<span class="pln">
<span class="kwd">case<span class="pln"> index of <span class="pun">...<span class="pln">
outStream <span class="pun">:=<span class="pln"> T7zStream<span class="pun">.<span class="typ">Create<span class="pun">(<span class="pln">aStream<span class="pun">,<span class="pln"> soReference<span class="pun">);<span class="pln">
<span class="typ">Result<span class="pln"> <span class="pun">:=<span class="pln"> S_OK<span class="pun">;<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

procedure <span class="typ">TMainForm<span class="pun">.<span class="typ">ExtractClick<span class="pun">(<span class="typ">Sender<span class="pun">:<span class="pln"> <span class="typ">TObject<span class="pun">);<span class="pln">
<span class="kwd">var<span class="pln">
i<span class="pun">:<span class="pln"> integer<span class="pun">;<span class="pln">
items<span class="pun">:<span class="pln"> array<span class="pun">[<span class="lit">0.<span class="pun">.<span class="lit">2<span class="pun">]<span class="pln"> of <span class="typ">Cardinal<span class="pun">;<span class="pln">
<span class="kwd">begin<span class="pln">
<span class="kwd">with<span class="pln"> <span class="typ">CreateInArchive<span class="pun">(<span class="pln">CLSID_CFormat7z<span class="pun">)<span class="pln"> <span class="kwd">do<span class="pln">
<span class="kwd">begin<span class="pln">
    <span class="typ">OpenFile<span class="pun">(<span class="str">'c:\test.7z'<span class="pun">);<span class="pln">
    <span class="com">// items must be sorted by index!<span class="pln">
    items<span class="pun">[<span class="lit">0<span class="pun">]<span class="pln"> <span class="pun">:=<span class="pln"> <span class="lit">0<span class="pun">;<span class="pln">
    items<span class="pun">[<span class="lit">1<span class="pun">]<span class="pln"> <span class="pun">:=<span class="pln"> <span class="lit">1<span class="pun">;<span class="pln">
    items<span class="pun">[<span class="lit">2<span class="pun">]<span class="pln"> <span class="pun">:=<span class="pln"> <span class="lit">2<span class="pun">;<span class="pln">
    <span class="typ">ExtractItems<span class="pun">(<span class="lit">@items<span class="pun">,<span class="pln"> <span class="typ">Length<span class="pun">(<span class="pln">items<span class="pun">),<span class="pln"> <span class="kwd">false<span class="pun">,<span class="pln"> <span class="kwd">nil<span class="pun">,<span class="pln"> <span class="typ">GetStreamCallBack<span class="pun">);<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

<span class="typ">Open<span class="pln"> stream
<span class="pun">打开流:<span class="pln">
<span class="kwd">with<span class="pln"> <span class="typ">CreateInArchive<span class="pun">(<span class="pln">CLSID_CFormatZip<span class="pun">)<span class="pln"> <span class="kwd">do<span class="pln">
<span class="kwd">begin<span class="pln">
   <span class="typ">OpenStream<span class="pun">(<span class="pln">T7zStream<span class="pun">.<span class="typ">Create<span class="pun">(<span class="typ">TFileStream<span class="pun">.<span class="typ">Create<span class="pun">(<span class="str">'c:\test.zip'<span class="pun">,<span class="pln"> fmOpenRead<span class="pun">),<span class="pln"> soOwned<span class="pun">));<span class="pln">
   <span class="typ">OpenStream<span class="pun">(<span class="pln">aStream<span class="pun">,<span class="pln"> soReference<span class="pun">);<span class="pln">
   <span class="pun">...<span class="pln">
<span class="kwd">end<span class="pun">;<span class="pln">

<span class="typ">Progress<span class="pln"> bar
<span class="pun">进度条回调:<span class="pln">
<span class="kwd">function<span class="pln"> <span class="typ">ProgressCallback<span class="pun">(<span class="pln">sender<span class="pun">:<span class="pln"> <span class="typ">Pointer<span class="pun">;<span class="pln"> total<span class="pun">:<span class="kwd">boolean</span><span class="pun">;</span><span class="pln"> value</span><span class="pun">:</span><span class="pln"> int64</span><span class="pun">):</span><span class="pln"> HRESULT</span><span class="pun">;</span><span class="pln"> stdcall</span><span class="pun">;</span><span class="kwd">begin</span><span class="kwd">if</span><span class="pln"> total </span><span class="kwd">then</span><span class="typ">Mainform</span><span class="pun">.</span><span class="typ">ProgressBar</span><span class="pun">.</span><span class="typ">Max</span><span class="pun">:=</span><span class="pln"> value </span><span class="kwd">else</span><span class="typ">Mainform</span><span class="pun">.</span><span class="typ">ProgressBar</span><span class="pun">.</span><span class="typ">Position</span><span class="pun">:=</span><span class="pln"> value</span><span class="pun">;</span><span class="typ">Result</span><span class="pun">:=</span><span class="pln"> S_OK</span><span class="pun">;</span><span class="kwd">end</span><span class="pun">;</span><span class="pln">

procedure </span><span class="typ">TMainForm</span><span class="pun">.</span><span class="typ">ExtractClick</span><span class="pun">(</span><span class="typ">Sender</span><span class="pun">:</span><span class="typ">TObject</span><span class="pun">);</span><span class="kwd">begin</span><span class="kwd">with</span><span class="typ">CreateInArchive</span><span class="pun">(</span><span class="pln">CLSID_CFormatZip</span><span class="pun">)</span><span class="kwd">do</span><span class="kwd">begin</span><span class="typ">OpenFile</span><span class="pun">(</span><span class="str">'c:\test.zip'</span><span class="pun">);</span><span class="typ">SetProgressCallback</span><span class="pun">(</span><span class="kwd">nil</span><span class="pun">,</span><span class="typ">ProgressCallback</span><span class="pun">);</span><span class="pun">...</span><span class="kwd">end</span><span class="pun">;</span><span class="kwd">end</span><span class="pun">;</span><span class="typ">Password</span><span class="pun">打开含有密码的文件:</span><span class="kwd">function</span><span class="typ">PasswordCallback</span><span class="pun">(</span><span class="pln">sender</span><span class="pun">:</span><span class="typ">Pointer</span><span class="pun">;</span><span class="kwd">var</span><span class="pln"> password</span><span class="pun">:</span><span class="typ">WideString</span><span class="pun">):</span><span class="pln"> HRESULT</span><span class="pun">;</span><span class="pln"> stdcall</span><span class="pun">;</span><span class="kwd">begin</span><span class="com">// call a dialog box ...</span><span class="pln">
   password </span><span class="pun">:=</span><span class="str">'password'</span><span class="pun">;</span><span class="typ">Result</span><span class="pun">:=</span><span class="pln"> S_OK</span><span class="pun">;</span><span class="kwd">end</span><span class="pun">;</span><span class="pln">
procedure </span><span class="typ">TMainForm</span><span class="pun">.</span><span class="typ">ExtractClick</span><span class="pun">(</span><span class="typ">Sender</span><span class="pun">:</span><span class="typ">TObject</span><span class="pun">);</span><span class="kwd">begin</span><span class="kwd">with</span><span class="typ">CreateInArchive</span><span class="pun">(</span><span class="pln">CLSID_CFormatZip</span><span class="pun">)</span><span class="kwd">do</span><span class="kwd">begin</span><span class="com">// using callback</span><span class="typ">SetPasswordCallback</span><span class="pun">(</span><span class="kwd">nil</span><span class="pun">,</span><span class="typ">PasswordCallback</span><span class="pun">);</span><span class="com">// or setting password directly</span><span class="typ">SetPassword</span><span class="pun">(</span><span class="str">'password'</span><span class="pun">);</span><span class="typ">OpenFile</span><span class="pun">(</span><span class="str">'c:\test.zip'</span><span class="pun">);</span><span class="pun">...</span><span class="kwd">end</span><span class="pun">;</span><span class="kwd">end</span><span class="pun">;</span><span class="typ">Writing</span><span class="pln"> archive
</span><span class="pun">压缩存档:</span><span class="pln">
procedure </span><span class="typ">TMainForm</span><span class="pun">.</span><span class="typ">ExtractAllClick</span><span class="pun">(</span><span class="typ">Sender</span><span class="pun">:</span><span class="typ">TObject</span><span class="pun">);</span><span class="kwd">var</span><span class="typ">Arch</span><span class="pun">:</span><span class="pln"> I7zOutArchive</span><span class="pun">;</span><span class="kwd">begin</span><span class="typ">Arch</span><span class="pun">:=</span><span class="typ">CreateOutArchive</span><span class="pun">(</span><span class="pln">CLSID_CFormat7z</span><span class="pun">);</span><span class="com">// add a file</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">AddFile</span><span class="pun">(</span><span class="str">'c:\test.bin'</span><span class="pun">,</span><span class="str">'folder\test.bin'</span><span class="pun">);</span><span class="com">// add files using willcards and recursive search</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">AddFiles</span><span class="pun">(</span><span class="str">'c:\test'</span><span class="pun">,</span><span class="str">'folder'</span><span class="pun">,</span><span class="str">'*.pas;*.dfm'</span><span class="pun">,</span><span class="kwd">true</span><span class="pun">,</span><span class="kwd">true</span><span class="pun">);</span><span class="com">// add a stream</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">AddStream</span><span class="pun">(</span><span class="pln">aStream</span><span class="pun">,</span><span class="pln"> soReference</span><span class="pun">,</span><span class="pln"> faArchive</span><span class="pun">,</span><span class="typ">CurrentFileTime</span><span class="pun">,</span><span class="typ">CurrentFileTime</span><span class="pun">,</span><span class="str">'folder\test.bin'</span><span class="pun">,</span><span class="kwd">false</span><span class="pun">,</span><span class="kwd">false</span><span class="pun">);</span><span class="com">// compression level</span><span class="typ">SetCompressionLevel</span><span class="pun">(</span><span class="typ">Arch</span><span class="pun">,</span><span class="lit">5</span><span class="pun">);</span><span class="com">// compression method if &lt;&gt; LZMA</span><span class="typ">SevenZipSetCompressionMethod</span><span class="pun">(</span><span class="typ">Arch</span><span class="pun">,</span><span class="pln"> m7BZip2</span><span class="pun">);</span><span class="com">// add a progress bar ...</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">SetProgressCallback</span><span class="pun">(...);</span><span class="com">// set a password if necessary</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">SetPassword</span><span class="pun">(</span><span class="str">'password'</span><span class="pun">);</span><span class="com">// Save to file</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">SaveToFile</span><span class="pun">(</span><span class="str">'c:\test.zip'</span><span class="pun">);</span><span class="com">// or a stream</span><span class="typ">Arch</span><span class="pun">.</span><span class="typ">SaveToStream</span><span class="pun">(</span><span class="pln">aStream</span><span class="pun">);</span><span class="kwd">end</span><span class="pun">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre><br><br>
来源:https://www.cnblogs.com/h2zZhou/p/12503965.html
頁: [1]
查看完整版本: 7-zip Delphi API