7-zip Delphi API Reading archive: [Extract to path:]
This API use the 7-zip dll (7z.dll) to read and write all 7-zip supported archive formats.
- Autor: Henri Gourvest
- Licence: MPL1.1
- Date: 15/04/2009
- Version: 1.1
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;[적용 테스트 후 수정]
with CreateInArchive(CLSID_CFormat7z) do begin OpenFile('c:\test.7z'); for i := 0 to NumberOfItems - 1 do begin if not ItemIsFolder[i] then begin try stream := TFileStream.Create(ItemPath[i], fmCreate); ExtractItem(i, stream, false); finally stream.free; end; end; end; 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;
'Delphi' 카테고리의 다른 글
StringToOleStr memory leak (0) | 2019.01.14 |
---|---|
IWebBrowser2 with Delphi (0) | 2018.09.28 |
Call function (procedure) as "Method Name" (0) | 2018.09.10 |
Overriding AsString in TFields(TStringField or TWideStringField...) (0) | 2018.09.10 |
ApplicationEvent.OnException 한곳에서 처리 (0) | 2018.09.10 |