Zlibar/de
Ü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
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;