Xceed Zip for COM/ActiveX on x86/x64 Documentation
Getting started quickly / Unzipping files from a zip file directly to memory
In This Topic
    Unzipping files from a zip file directly to memory
    In This Topic

    Decompressing from a zip file directly to memory

    When unzipping files, Xceed Zip allows you selectively determine the way it will be unzipped. You can chose to unzip files to disk (the default), to unzip files into a single block of memory, or to provide you with streaming data (blocks of uncompressed data as it becomes available from the decompression engine). To unzip files to memory, perform the following 6 steps.

    • Specify the zip file to unzip files from. To do this, set the ZipFilename property.

    • Specify the folder where to unzip files to (even if you are unzipping all files to memory). To do this, set UnzipToFolder property.

    • Tell Xceed Zip to start unzipping. To do this, call the Unzip method.

    • Tell Xceed Zip which files you want it to unzip directly to memory. To do this, write a handler for the UnzipPreprocessingFile event.

    • Get the uncompressed file data. To do this, write a handler for the UnzippingMemoryFile event.

    • Make sure it worked successfully. To do this, check the Unzip method's return value. 

    Here is sample code for these 6 steps (excluding the code for the UnzippingMemoryFile event): 

    Visual Basic Copy Code

    ' Don't forget to put an Xceed Zip control on a form
    Dim ResultCode As xcdError

    Call XceedZip1.License( "your license key" )
    XceedZip1.ZipFilename = "c:\incoming\searchresults.zip"
    XceedZip1.UnzipToFolder = "c:\other files\"

    ResultCode = XceedZip1.Unzip

    If ResultCode = xerSuccess Then MsgBox "Files unzipped successfully." Then
    Else
       MsgBox XceedZip1.GetErrorDescription(xvtError, ResultCode)
    EndIf

    Delphi Copy Code

    var xErr : xcdError; 
    begin
       XceedZip1.License( 'your license key' );
       XceedZip1.ZipFilename := 'c:\incoming\searchresults.zip'; 
       XceedZip1.UnzipToFolder := 'c:\other files';  

       xErr := XceedZip1.Unzip; 
       ShowMessage( XceedZip1.GetErrorDescription( xvtError, xErr ) ); 
    end;

    Here is sample code to put into the UnzipPreprocessingFile event handler. This sample assumes you only want two particular files to be unzipped to memory, and the rest to go to "c:\other files":
    Visual Basic Copy Code
    If sFilename = "results.txt" Or sFilename = "query.txt" Then
      xDestination = xudMemory
    End If
    Delphi Copy Code
    if( sFilename = 'results.txt' ) or ( sFilename = 'query.txt' ) then
      xDestination := xudMemory;
    Here is sample code to put into the UnzippingMemoryFile event handler. This sample assumes you have declared the "results" and "query" variables globally elsewhere than in the UnzippingMemoryFile event handler:
    Visual Basic Copy Code

    Dim Results As String -- move this line to declare variable globally
    Dim Query As String -- move this line to declare variable globally

    If sFilename = "results.txt" Then
      Results = baData
    ElseIf sFilename = "query.txt" T
    hen
      Query = baData
    End If

    XAML Copy Code

    var

       sResult : string; { move this line to declare variable globally } 
       sQuery : string; { move this line to declare variable globally } 
       lSize : LongInt; 
       pData : PChar; 

    begin
       { the file does not contain the null-terminating char } 
       lSize := VarArrayHighBound( vaUncompressedData, 1 ) - VarArrayLowBound( vaUncompressedData, 1 ) + 1; 

       GetMem( pData, lSize + 1 ); 
       CopyMemory( pData, VarArrayLock( vaUncompressedData ), lSize ); 
       VarArrayUnlock( vaUncompressedData ); 

       pData[ lSize ] := #0;  

       if ( sFilename = 'results.txt' ) then 
       begin 
          sResult := pData; 
          ListBox1.Items.Add( sResult ); 
       end;  

       if ( sFilename = 'query.txt' ) then 
         sQuery := pData; 
    end;