delphi7 压缩excel出现乱码
library ConvertFormat;
uses
SysUtils,
Classes,
ZLib;
{$R *.res}
//压缩
function CompressFile(const DestFile,SrcFile:pchar):Boolean; stdcall;
var
des:TMemoryStream;
sou:TMemoryStream;
cs: TCompressionStream;
Count: Integer;
ret:boolean;
level: TCompressionLevel;
begin
ret:=false;
level:= clFastest;
des:=TMemoryStream.Create;
sou:= TMemoryStream.Create;
cs:=TCompressionStream.Create(level,des);
try
sou.LoadFromFile(SrcFile);
Count:=sou.Size;
sou.SaveToStream(cs);
cs.Free;
sou.Clear;
sou.WriteBuffer(Count, SizeOf(Count));
sou.CopyFrom(des,0);
des.Clear;
des.Seek(0,soFromBeginning);
des.CopyFrom(sou,0);
des.SaveToFile(DestFile);
ret:=true;
finally
des.Free;
sou.Free;
result:=ret;
end;
end;
//解压缩
function DeCompressFile(const DestFile,SrcFile:pchar):boolean;stdcall;
var
des:TFileStream;
sou:TMemoryStream;
decs: TDeCompressionStream;
Buffer: PChar;
Count: integer;
ret:boolean;
begin
Buffer:=nil;
ret:=false;
des:=TFileStream.Create(DestFile,fmCreate);
sou:= TMemoryStream.Create;
decs:=nil;
try
sou.LoadFromFile(SrcFile);
sou.Seek(0,soFromBeginning);
sou.ReadBuffer(count,sizeof(count));
GetMem(Buffer, Count);
decs:=TDeCompressionStream.Create(sou);
decs.ReadBuffer(Buffer^, Count);
Des.WriteBuffer(Buffer^, Count);
Des.Position := 0;//复位流指针
ret:=true;
finally
FreeMem(Buffer);
decs.Free;
des.Free;
sou.Free;
result:=ret;
end;
end;
exports
CompressFile, DeCompressFile;
begin
end.