7Zip Plugin API

7zip plugin Api

This API use the 7-zip plugins to read and write all 7-zip supported archive formats. You need all files located in the “Formats” and “Codecs” folders from 7-zip install directory.

Reading archive:

Extract to path:

 with CreateInArchive(‘Formats/zip.dll’) do
begin
OpenFile(‘c:/test.zip’);
ExtractTo(
‘c:/test’);
end;

Get file list:

 with CreateInArchive(‘Formats/7z.dll’) do
begin
OpenFile(‘c:/test.7z’);
for i := 0 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
Writeln(ItemPath[i]);
end;

Extract to stream

 with CreateInArchive(‘Formats/7z.dll’) do
begin
OpenFile(‘c:/test.7z’);
for i := 0 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
ExtractItem(i, stream, false);
end;

Extract “n” Items

function GetStreamCallBack(sender: Pointer; index: Cardinal;
var outStream: ISequentialOutStream): HRESULT; stdcall;
begin
case index of
outStream := T7zStream.Create(aStream, soReference);
Result := S_OK;
end;

procedure TMainForm.ExtractClick(Sender: TObject);
var
i: integer;
items:
array[0..2] of Cardinal;
begin
with CreateInArchive(‘Formats/7z.dll’) do
begin
OpenFile(‘c:/test.7z’);
// items must be sorted by index!
items[0] := 0;
items[
1] := 1;
items[
2] := 2;
ExtractItems(@items, Length(items), false,
nil, GetStreamCallBack);
end;
end;

Open stream

 with CreateInArchive(‘Formats/zip.dll’) do
begin
OpenStream(T7zStream.Create(TFileStream.Create(‘c:/test.zip’, fmOpenRead), soOwned));
OpenStream(aStream, soReference);

end;

Progress bar

 function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then
Mainform.ProgressBar.Max := value else
Mainform.ProgressBar.Position := value;
Result := S_OK;
end;

procedure TMainForm.ExtractClick(Sender: TObject);
begin
with CreateInArchive(‘Formats/zip.dll’) do
begin
OpenFile(‘c:/test.zip’);
SetProgressCallback(
nil, ProgressCallback);

end;
end;

Password

 function PasswordCallback(sender: Pointer; var password: WideString): HRESULT; stdcall;
begin
// call a dialog box …
password := ‘password’;
Result := S_OK;
end;

procedure TMainForm.ExtractClick(Sender: TObject);
begin
with CreateInArchive(‘Formats/zip.dll’) do
begin
// using callback
SetPasswordCallback(nil, PasswordCallback);
// or setting password directly
SetPassword(‘password’);
OpenFile(
‘c:/test.zip’);

end;
end;

Writing archive

 procedure TMainForm.ExtractAllClick(Sender: TObject);
var
Arch: I7zOutArchive;
begin
Arch := CreateOutArchive(‘Formats/7z.dll’);
// 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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值