- Notifications
You must be signed in to change notification settings - Fork13
A Delphi Wrapper around 7z.dll
License
NotificationsYou must be signed in to change notification settings
geoffsmith82/d7zip
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- Author: Henri Gourvesthgourvest@progdigy.com
- Licence: MPL1.1
- Date: 2011-11-29
- Version: 1.2
- Original source at Google Code
- Extended version by Daniel Marschall 2024-05-15 with a lot of changes (see sevenzip.pas header for changelog)
- Example usage Demo added by Geoffrey Smith
This API use the 7-zip dll (7z.dll) to read and write all 7-zip supported archive formats. The latest 32-bit and 64-bit version of the 7z.dll is included in the repository (currently 24.08). According to the documentation, file formats listed below are supported, although many may only support decompression/extraction and not creation/compression.
- zip
- bz2
- rar
- arj
- z
- lzh
- 7z
- cab
- nsis
- lzma
- lzma86
- xz
- ppmd
- squashFS
- cramFS
- apm
- mslz
- flv
- swf
- swfc
- ntfs
- fat
- mbr
- vhd
- pe
- elf
- macho
- udf
- xar
- mub
- hfs
- dmg
- compound doc
- wim
- iso
- bkf
- chm
- split
- rpm
- deb
- cpio
- tar
- gzip
This demo currently allows you to locate archives on your hard disk and list the contents of archive. It uses VirtualTree that you can get in the GetIt package manager in Delphi.
var archive : I7zInArchive;begin archive := CreateInArchive(CLSID_CFormatZip); archive.OpenFile('c:\test.zip'); archive.ExtractTo('c:\test');end;
var archive : I7zInArchive; i : Integer;begin archive := CreateInArchive(CLSID_CFormat7z); archive.OpenFile('c:\test.7z');for i :=0to archive.NumberOfItems -1doifnot archive.ItemIsFolder[i]then Writeln(archive.ItemPath[i]);end;
with CreateInArchive(CLSID_CFormat7z)dobegin OpenFile('c:\test.7z');for i :=0to NumberOfItems -1doifnot ItemIsFolder[i]then ExtractItem(i, stream, false);end;
functionGetStreamCallBack(sender: Pointer; index: Cardinal;var outStream: ISequentialOutStream): HRESULT; stdcall;begincase indexof ... outStream := T7zStream.Create(aStream, soReference); Result := S_OK;end;procedureTMainForm.ExtractClick(Sender: TObject);var archive : I7zInArchive; i: integer; items:array[0..2]of Cardinal;begin archive := CreateInArchive(CLSID_CFormat7z); archive.OpenFile('c:\test.7z');// items must be sorted by index! items[0] :=0; items[1] :=1; items[2] :=2; archive.ExtractItems(@items, Length(items), false,nil, GetStreamCallBack);end;
var archive : I7zInArchive;begin archive := CreateInArchive(CLSID_CFormatZip)do archive.OpenStream(T7zStream.Create(TFileStream.Create('c:\test.zip', fmOpenRead), soOwned)); archive.OpenStream(aStream, soReference); ...end;
functionProgressCallback(sender: Pointer; total: boolean;value: int64): HRESULT; stdcall;beginif totalthen Mainform.ProgressBar.Max :=valueelse Mainform.ProgressBar.Position :=value; Result := S_OK;end;procedureTMainForm.ExtractClick(Sender: TObject);var archive : I7zInArchive;begin archive := CreateInArchive(CLSID_CFormatZip); archive.OpenFile('c:\test.zip'); archive.SetProgressCallback(nil, ProgressCallback); ...end;
functionPasswordCallback(sender: Pointer;var password: WideString): HRESULT; stdcall;begin// call a dialog box ... password :='password'; Result := S_OK;end;procedureTMainForm.ExtractClick(Sender: TObject);var archive : I7zInArchive;begin archive := CreateInArchive(CLSID_CFormatZip);// using callback archive.SetPasswordCallback(nil, PasswordCallback);// or setting password directly archive.SetPassword('password'); archive.OpenFile('c:\test.zip'); ...end;
procedureTMainForm.PackFilesClick(Sender: TObject);var Arch: I7zOutArchive;begin Arch := CreateOutArchive(CLSID_CFormat7z);// add a file Arch.AddFile('c:\test.bin','folder\test.bin');// add files using willcards and recursive search Arch.AddFiles('c:\test','folder','*.pas;*.dfm', true);// add a stream Arch.AddStream(aStream, soReference, faArchive, CurrentFileTime, CurrentFileTime,'folder\test.bin', false, false);// compression level SetCompressionLevel(Arch,5);// compression method if <> LZMA SevenZipSetCompressionMethod(Arch, m7BZip2);// add a progress bar ... Arch.SetProgressCallback(...);// set a password if necessary Arch.SetPassword('password');// Save to file Arch.SaveToFile('c:\test.zip');// or a stream Arch.SaveToStream(aStream);end;