📄 uzip.pas
字号:
unit uZip;
interface
uses Classes,Windows;
{
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, IdGlobal,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, StdCtrls, IdIntercept,
IdLogBase, IdLogDebug, OleCtrls, SHDocVw, activex, StrUtils, DB,
IdURI,
Registry, DateUtils, IdHTTPServer, IdCookieManager, SyncObjs,
ADODB, IdIOHandlerSocket, idSocks, Wininet, shellapi;
}
function ZIP(mInputStream: TStream; mOutputStream: TStream ): BOOL;
function UNZIP(mInputStream: TStream; mOutputStream: TStream): BOOL;
implementation
uses ZLib;
function ZIP(mInputStream: TStream; mOutputStream: TStream ): BOOL;
var
p: pchar;
TCS: TCompressionStream;
TDS: TDecompressionStream;
ncount: integer;
begin
p := nil;
TCS := nil;
TDS := nil;
result := false;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
try
TCS := TCompressionStream.Create(clMax, mOutputStream);
ncount := mInputStream.size;
getMem(p, ncount);
mInputStream.ReadBuffer(p^, ncount);
TCS.WriteBuffer((@ncount)^, sizeof(ncount));
TCS.WriteBuffer(p^, ncount);
//关键代码:写入流
finally
TCS.Free;
FreeMem(p);
end;
result := true;
end;
function UNZIP(mInputStream: TStream; mOutputStream: TStream): BOOL;
var
p: pchar;
TCS: TCompressionStream;
TDS: TDecompressionStream;
ncount: Integer;
begin
p := nil;
TCS := nil;
TDS := nil;
result := false;
if not (Assigned(mInputStream) and Assigned(mOutputStream)) then Exit;
try
TDS := TDecompressionStream.Create(mInputStream); //其中的clMax表示压缩级别,可以更改,值是下列参数之一:clNone, clFastest, clDefault, clMax
// ncount := 57974;
TDS.ReadBuffer(ncount, sizeof(ncount));
getMem(p, ncount);
TDS.ReadBuffer(p^, ncount);
mOutputStream.WriteBuffer(p^, ncount);
//关键代码:写入流
finally
TDS.Free;
FreeMem(p);
end;
result := true;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -