你参考这点代码吧,以前自己用的。
现在我使用vclzip了。
如果你不使用控件,你可以使用。
unit my1;
interface
uses zlib,Classes,SysUtils;
procedure myCompress(filename:string);
procedure myUnCompress(const s_filename:string );
implementation
procedure myCompress(filename:string);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
CompressedStream: TMemoryStream;
Begin
CompressedStream := TMemoryStream.Create;
CompressedStream.LoadFromFile(filename);
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(clDefault, DestStream);
Try
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear;
CompressedStream.WriteBuffer(Count, SizeOf(Count));
CompressedStream.CopyFrom(DestStream, 0);
CompressedStream.SaveToFile(filename);
finally
DestStream.Free;
CompressedStream.Free;
end;
end;
procedure myUnCompress(const s_filename:string );
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
CompressedStream: TMemoryStream;
Begin
CompressedStream :=TMemoryStream.Create;
CompressedStream.LoadFromFile(s_filename);
CompressedStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(CompressedStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;//复位流指针
DestStream.SaveToFile(s_filename);
finally
FreeMem(Buffer);
DestStream.Free;
CompressedStream.Free;
end;
end;
end.