zoukankan      html  css  js  c++  java
  • 7-zip Delphi API

    官网已经找不到了。
    这个地址比较新
    https://github.com/zedalaye/d7zip
    在这个基础上 融合了
    SevenZip.pas BUG修改版 - 20160613 - 堕落恶魔 - 博客园
    https://www.cnblogs.com/hs-kill/p/3876160.html
    然后再加了一些小的修改。
    
    最后,提供一个比较全面的 例子。
    Delphi】从内存读取或解压压缩文件(RARZIPTARGZIP等)(一) - 峋山隐修会 - 博客园
    http://www.cnblogs.com/caibirdy1985/archive/2013/05/13/4232949.html
    Delphi】从内存读取或解压压缩文件(RARZIPTARGZIP等)(二) - 峋山隐修会 - 博客园
    http://www.cnblogs.com/caibirdy1985/archive/2013/05/14/4232948.html
    
    
    
    7-zip Delphi API
    This API use the 7-zip dll (7z.dll) to read and write all 7-zip supported archive formats.
    
    - Autor: Henri Gourvest <hgourvest@progdigy.com>
    - Licence: MPL1.1
    - Date: 15/04/2009
    - Version: 1.2
    
    Reading archive:
    
    Extract to path:
    解压到目录:
    with CreateInArchive(CLSID_CFormatZip) do
    begin
       OpenFile('c:	est.zip');
       ExtractTo('c:	est');
    end;
    
    Get file list:
    获取文件列表:
    with CreateInArchive(CLSID_CFormat7z, 'Formats7z.dll') do
    begin
       OpenFile('c:	est.7z');
       for i := 0 to NumberOfItems - 1 do
       if not ItemIsFolder[i] then
          Writeln(ItemPath[i]);
    end;
    
    Extract to stream
    解压到流:
    with CreateInArchive(CLSID_CFormat7z) do
    begin
       OpenFile('c:	est.7z');
       for i := 0 to NumberOfItems - 1 do
        if not ItemIsFolder[i] then
           ExtractItem(i, stream, false);
    end;
    
    Extract "n" Items
    解压多项目:
    function GetStreamCallBack(sender: Pointer; index: Cardinal;
    var outStream: ISequentialOutStream): HRESULT; stdcall;
    begin
    case index of ...
      outStream := T7zStream.Create(aStream, soReference);
      Result := S_OK;
    end;
    
    procedure TMainForm.ExtractClick(Sender: TObject);
    var
    i: integer;
    items: array[0..2] of Cardinal;
    begin
      with CreateInArchive(CLSID_CFormat7z) do
      begin
        OpenFile('c:	est.7z');
        // items must be sorted by index!
        items[0] := 0;
        items[1] := 1;
        items[2] := 2;
        ExtractItems(@items, Length(items), false, nil, GetStreamCallBack);
      end;
    end;
    
    Open stream
    打开流:
    with CreateInArchive(CLSID_CFormatZip) do
    begin
       OpenStream(T7zStream.Create(TFileStream.Create('c:	est.zip', fmOpenRead), soOwned));
       OpenStream(aStream, soReference);
       ...
    end;
    
    Progress bar
    进度条回调:
    function ProgressCallback(sender: Pointer; total:boolean; value: int64): HRESULT; stdcall;beginif total thenMainform.ProgressBar.Max:= value elseMainform.ProgressBar.Position:= value;Result:= S_OK;end;
    
    procedure TMainForm.ExtractClick(Sender:TObject);beginwithCreateInArchive(CLSID_CFormatZip)dobeginOpenFile('c:	est.zip');SetProgressCallback(nil,ProgressCallback);...end;end;Password打开含有密码的文件:functionPasswordCallback(sender:Pointer;var password:WideString): HRESULT; stdcall;begin// call a dialog box ...
       password :='password';Result:= S_OK;end;
    procedure TMainForm.ExtractClick(Sender:TObject);beginwithCreateInArchive(CLSID_CFormatZip)dobegin// using callbackSetPasswordCallback(nil,PasswordCallback);// or setting password directlySetPassword('password');OpenFile('c:	est.zip');...end;end;Writing archive
    压缩存档:
    procedure TMainForm.ExtractAllClick(Sender:TObject);varArch: I7zOutArchive;beginArch:=CreateOutArchive(CLSID_CFormat7z);// add a fileArch.AddFile('c:	est.bin','folder	est.bin');// add files using willcards and recursive searchArch.AddFiles('c:	est','folder','*.pas;*.dfm',true,true);// add a streamArch.AddStream(aStream, soReference, faArchive,CurrentFileTime,CurrentFileTime,'folder	est.bin',false,false);// compression levelSetCompressionLevel(Arch,5);// compression method if <> LZMASevenZipSetCompressionMethod(Arch, m7BZip2);// add a progress bar ...Arch.SetProgressCallback(...);// set a password if necessaryArch.SetPassword('password');// Save to fileArch.SaveToFile('c:	est.zip');// or a streamArch.SaveToStream(aStream);end;
  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/12503965.html
Copyright © 2011-2022 走看看