Delphi 7-zip 单元文件 sevenzip.pas
7-zip Delphi API
This API use the 7-zip dll (7z.dll) to read and write all 7-zip supported archive formats.
- Autor: Henri Gourvest <hgourvest@progdigy.com>
- Licence: MPL1.1
- Date: 15/04/2009
- Version: 1.1
Reading archive:
Extract to path:
with CreateInArchive(CLSID_CFormatZip) do begin OpenFile('c:\test.zip'); ExtractTo('c:\test'); end;
Get file list:
with CreateInArchive(CLSID_CFormat7z) 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(CLSID_CFormat7z) 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(CLSID_CFormat7z) 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(CLSID_CFormatZip) 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(CLSID_CFormatZip) 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(CLSID_CFormatZip) 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(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;
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。