Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A Delphi Wrapper around 7z.dll

License

NotificationsYou must be signed in to change notification settings

geoffsmith82/d7zip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

7-Zip Demo

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.

Reading archive:

Extract to path:

var  archive : I7zInArchive;begin  archive := CreateInArchive(CLSID_CFormatZip);  archive.OpenFile('c:\test.zip');  archive.ExtractTo('c:\test');end;

Get file list:

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;

Extract to stream

with CreateInArchive(CLSID_CFormat7z)dobegin   OpenFile('c:\test.7z');for i :=0to NumberOfItems -1doifnot ItemIsFolder[i]then       ExtractItem(i, stream, false);end;

Extract "n" Items

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;

Open stream

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;

Progress bar

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;

Password

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;

Writing archive

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;

Releases

No releases published

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp