Difference between revisions of "unzip"

From Lazarus wiki
Jump to navigationJump to search
m (→‎See also: Add category)
 
(5 intermediate revisions by 2 users not shown)
Line 4: Line 4:
 
* '''zip''' a unit which implements an zip mechanism with native Pascal links.  
 
* '''zip''' a unit which implements an zip mechanism with native Pascal links.  
 
* '''unzip''' a unit which implements an unzip mechanism with native Pascal links.   
 
* '''unzip''' a unit which implements an unzip mechanism with native Pascal links.   
 +
* '''ziputils''' contains some tools for the unzip unit.
 
* '''zipbase''' a unit which defines the interface for the info-zip unzip library.  
 
* '''zipbase''' a unit which defines the interface for the info-zip unzip library.  
* '''ziputils''' contains some type definitions for the unzip unit.
 
  
 
The zip library unit is included in Lazarus 2.
 
The zip library unit is included in Lazarus 2.
 +
 +
=== Example ===
 +
 +
Zip compression is in widespread use. It is also used to compress EPUB files.
 +
 +
<syntaxhighlight lang=pascal>
 +
uses
 +
  unzip,ziputils;
 +
const  cover  =  'cover.jpeg';
 +
var UnZipper          : unzFile;
 +
    epubfile, UnPackPathFile : String;
 +
    zfinfos  :  unz_file_info_ptr;
 +
    i        :  Integer;
 +
    li_SizeRead,li_SizeWrite,li_TotalW  : Longint;
 +
    lb_FoundFile : Boolean;
 +
    FBuffer  :  TExtFileBuffer;
 +
    li_HandleDest : Integer;   
 +
begin
 +
  epubfile :='/Your/Path/to/epub';
 +
  UnPackPathFile :='/Your/Path/to/uncompressed/file';
 +
  try
 +
    UnZipper:=unzOpen(@epubfile[1]);
 +
    if unzLocateFile(UnZipper,@cover[1],2)= UNZ_OK then
 +
      try
 +
        unzOpenCurrentFile(UnZipper);
 +
        Getmem(zfinfos,SizeOf(zfinfos));
 +
        unzGetCurrentFileInfo(UnZipper,zfinfos,@cover[1],SizeOf(cover),nil,0,nil,0);
 +
        lb_FoundFile := False;
 +
        if not FileExistsUTF8(UnPackPathFile)
 +
          Then  FileCreateUTF8(UnPackPathFile);
 +
        li_HandleDest := FileOpenUTF8(UnPackPathFile, fmopenwrite );
 +
        while not lb_FoundFile do
 +
          begin
 +
            li_SizeRead := unzReadCurrentFile(UnZipper,@FBuffer[0],high ( Fbuffer ) + 1);
 +
            if li_SizeRead < high ( Fbuffer ) + 1 then lb_FoundFile := True;
 +
            li_SizeWrite := Filewrite(li_HandleDest,Fbuffer,li_SizeRead);
 +
            inc( li_TotalW, li_SizeWrite );
 +
          end;
 +
        Break;
 +
      finally
 +
        Freemem(zfinfos,SizeOf(zfinfos));
 +
    end;
 +
  finally
 +
    try
 +
      FileClose(li_HandleDest);
 +
    finally
 +
      unzCloseCurrentFile(UnZipper);
 +
      unzClose(UnZipper);
 +
    end;
 +
  end; 
 +
end.
 +
</syntaxhighlight>
  
 
== See also ==
 
== See also ==
 +
 
* [[zip|zip library link]]
 
* [[zip|zip library link]]
 
* [[paszlib|paszlib: Object oriented zip file handling which does not require external libraries]]
 
* [[paszlib|paszlib: Object oriented zip file handling which does not require external libraries]]
Line 15: Line 68:
 
Go back to [[Package_List|Packages List]]
 
Go back to [[Package_List|Packages List]]
  
 +
[[Category:FPC]]
 
[[Category:Packages]]
 
[[Category:Packages]]

Latest revision as of 12:32, 2 August 2020

Unzip and zip

The unzip and zip package contains several routines to unzip or zip files on every Lazarus supported platforms. There are 4 units:

  • zip a unit which implements an zip mechanism with native Pascal links.
  • unzip a unit which implements an unzip mechanism with native Pascal links.
  • ziputils contains some tools for the unzip unit.
  • zipbase a unit which defines the interface for the info-zip unzip library.

The zip library unit is included in Lazarus 2.

Example

Zip compression is in widespread use. It is also used to compress EPUB files.

uses
  unzip,ziputils;
const  cover  =  'cover.jpeg';
var UnZipper          : unzFile;
    epubfile, UnPackPathFile : String;
    zfinfos  :  unz_file_info_ptr;
    i        :  Integer;
    li_SizeRead,li_SizeWrite,li_TotalW  : Longint;
    lb_FoundFile : Boolean;
    FBuffer  :  TExtFileBuffer;
    li_HandleDest : Integer;    
begin
   epubfile :='/Your/Path/to/epub';
   UnPackPathFile :='/Your/Path/to/uncompressed/file';
   try
     UnZipper:=unzOpen(@epubfile[1]);
     if unzLocateFile(UnZipper,@cover[1],2)= UNZ_OK then
       try
         unzOpenCurrentFile(UnZipper);
         Getmem(zfinfos,SizeOf(zfinfos));
         unzGetCurrentFileInfo(UnZipper,zfinfos,@cover[1],SizeOf(cover),nil,0,nil,0);
         lb_FoundFile := False;
         if not FileExistsUTF8(UnPackPathFile)
           Then  FileCreateUTF8(UnPackPathFile);
         li_HandleDest := FileOpenUTF8(UnPackPathFile, fmopenwrite );
         while not lb_FoundFile do
           begin
             li_SizeRead := unzReadCurrentFile(UnZipper,@FBuffer[0],high ( Fbuffer ) + 1);
             if li_SizeRead < high ( Fbuffer ) + 1 then lb_FoundFile := True;
             li_SizeWrite := Filewrite(li_HandleDest,Fbuffer,li_SizeRead);
             inc( li_TotalW, li_SizeWrite );
           end;
         Break;
       finally
         Freemem(zfinfos,SizeOf(zfinfos));
     end;
   finally
     try
       FileClose(li_HandleDest);
     finally
       unzCloseCurrentFile(UnZipper);
       unzClose(UnZipper);
     end;
   end;   
end.

See also

Go back to Packages List