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