您的位置:首页 > 编程语言 > Delphi

开源7zip的Delphi接口声明及调用范例

2013-05-01 16:16 239 查看
解压到目录:
with CreateInArchive('Formats\zip.dll') do
begin

OpenFile('c:\test.zip');
ExtractTo('c:\test');
end;
获取文件列表:
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;
解压到流:
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;
解压多项目:
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;
打开流:
with
CreateInArchive('Formats\zip.dll') do
begin

OpenStream(T7zStream.Create(TFileStream.Create('c:\test.zip', fmOpenRead),
soOwned));
OpenStream(aStream, soReference);

...
end;
进度条回调:
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;
打开含有密码的文件:
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;
压缩存档:
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐