Zlibar/de

From Lazarus wiki
Revision as of 13:43, 11 December 2005 by Swen (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Über

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 von 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 von 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.1

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

Autor

Andrew Haines

Lizenz

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


Download

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

Abhängigkeiten / Systemvoraussetzungen

  • FreePascal
  • Demo Program requires Lazarus
  • LCL (for endian safe routines)

Issues: Tested on Linux. Needs testing on Windows.

Verwendung

Add the unit "zlibar" to your uses section.

TZLibWriteArchive

Beispiel:

 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;

TZlibReadArchive

Beispiel:

 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+ZReadStream.FilesInArchive[X].FilePath+'/'+ZReadStream.FilesInArchive[X].FIleName);
     FileStream.Position := 0;
     FileStream.Size := 0;
   end;
   ZReadArc.Free;
   ArchStream.Free;
   FileStream.Free;  
 end;