Zlibar

From Lazarus-ccr

Jump to: navigation, search

Deutsch (de) English (en) Français (fr)

Contents

[edit] About

zlibar is a unit that contains components to create a single compressed file archive that contains many files. It uses paszlib that is included with FreePascal so there are no external library requirements

The two main components are :

  • TZlibWriteArchive - Used to create an archive
  • TZlibReadArchive - Used to read the archive and extract it's files

Features of TZlibWriteArchive :

  • Create the Archive file in a stream, allowing you to save it to a file or do something else creative with it
  • Each file in the archive is stored with a MD5 checksum
  • Each file can be stored with a relative path
  • Contains progress callbacks to inform the program of the current file and all files progress

Features of TZlibReadArchive :

  • Loads the archive from a TStream.
  • Contains a progress callback to inform the program of the extraction progress
  • Files in the archive are extractable by an index number and are extracted to a TStream

The download contains a demo program, and the unit. Also a package file.

Although not tested, it should work on any platform.

Changes in versions :

0.2.2

  • LCL requirement removed
  • FPC version 2.0.4 (or a recent development version) required.
  • Compatible with FPC 2.0.4 ( go figure.... ;)

0.2.1

  • archives should work across different endian machines now.
  • fixed bad memory corruption bug
  • now requires LCL for endian safeness

[edit] Author

Andrew Haines

[edit] License

zlibar.pas is distributed with the same modified LGPL as the LCL, so it is possible to use it in proprietary programs without disclosing your source.


[edit] Download

The latest stable release can be found on the Lazarus CCR Files page.

[edit] Dependencies / System Requirements

  • FreePascal
  • Demo Program requires Lazarus

Issues: Tested on Linux. Needs testing on Windows.
Confirmed working on Windows
--Eyecreate 03:22, 23 February 2007 (CET)

[edit] Usage

Add the unit "zlibar" to your uses section.

[edit] TZLibWriteArchive

Example:

 var
 Zar: TZlibWriteArchive;
 Stream: TMemoryStream;
 X: Integer;
 begin    
   Stream := TMemoryStream.Create;
   Zar := TZlibWriteArchive.Create;    
   Zar.OutStream := Stream;
 
   Zar.InputFiles.Add('/path/to/MyFileName1');
   Zar.InputFiles.Add('/path/to/MyFileName2');
 
   Zar.CreateArchive;
 
   Stream.SaveToFile('MySavedFileName');
   Zar.Free;
   Stream.Free;
 end;

[edit] TZlibReadArchive

Example:

 var
 ArchStream: TMemoryStream;
 FileStream: TMemoryStream;
 ZReadArc: TZlibReadArchive;
 X: Integer;
 DestPath: String;
 begin
   ArchStream := TMemoryStream.Create;
   FileStream := TmemoryStream.Create;
   
   ArchStream.LoadFromFile('ArchiveFileName');
   ZReadArc:= TZlibReadArchive.Create(ArchStream);
   DestPath := '/Some/Path';
   for X := 0 to ZReadArc.Count -1 do begin    
     ZReadArc.ExtractFileToStream(X, FileStream);
     FileStream.SaveToFile(DestPath+ZReadArc.FilesInArchive[X].FilePath+'/'+ZReadArc.FilesInArchive[X].FIleName);
     FileStream.Position := 0;
     FileStream.Size := 0;
   end;
   ZReadArc.Free;
   ArchStream.Free;
   FileStream.Free;  
 end;