procedure TForm1.Button1Click(Sender: TObject);
var
jy:TdeCompressionStream;
target:tmemorystream;
fstream:tfilestream;
buf:array [1..512] of byte;
i:int64;
begin
target:=tmemorystream.Create;
fstream:=tfilestream.Create(ExtractFilePath(ParamStr(0))+'file\aa.ash',fmopenread);
jy:=TdeCompressionStream.Create(fstream);
jy.Position:=0;
target.Seek(0,sofromend) ;
try
begin
repeat
begin
i:=jy.Read(buf,512);
if i>0 then
target.Write(buf,512);
end;
until i=0;
target.Position:=0;
target.SaveToFile(ExtractFilePath(ParamStr(0))+'file\aa.doc');
end;
finally
begin
jy.Free;
fstream.Free;
end;
end;
end;
以上是代码,很简单,就是把一个压缩好的文件解压,但i:=jy.Read(buf,512);这里老是出错,请问是为什么?错误提示就是“eorro”,什么都没有了
var
jy:TdeCompressionStream;
target:tmemorystream;
fstream:tfilestream;
buf:array [1..512] of byte;
i:int64;
begin
target:=tmemorystream.Create;
fstream:=tfilestream.Create(ExtractFilePath(ParamStr(0))+'file\aa.ash',fmopenread);
jy:=TdeCompressionStream.Create(fstream);
jy.Position:=0;
target.Seek(0,sofromend) ;
try
begin
repeat
begin
i:=jy.Read(buf,512);
if i>0 then
target.Write(buf,512);
end;
until i=0;
target.Position:=0;
target.SaveToFile(ExtractFilePath(ParamStr(0))+'file\aa.doc');
end;
finally
begin
jy.Free;
fstream.Free;
end;
end;
end;
以上是代码,很简单,就是把一个压缩好的文件解压,但i:=jy.Read(buf,512);这里老是出错,请问是为什么?错误提示就是“eorro”,什么都没有了
procedure UnCompressStream( var memStream: TMemoryStream );
var
SourceStream: TDecompressionStream;
DestStream: TMemoryStream;
Buffer: PChar;
Count: Integer;
Begin
memStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream := TMemoryStream.Create;
SourceStream := TDecompressionStream.Create(memStream); Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position := 0;
memStream.Clear ;
memStream.CopyFrom(DestStream, 0) ;
finally
FreeMem(Buffer);
DestStream.Free;
end;
end;procedure CompressStream(var memStream: TMemoryStream; const CompressionLevel: TCompressionLevel=clMax);
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
Count := memStream.Size;
DestStream := TMemoryStream.Create;
SourceStream := TCompressionStream.Create( CompressionLevel, DestStream );
Try
memStream.SaveToStream(SourceStream);
// SourceStream.SaveToStream(SourceStream);
SourceStream.Free;
memStream.Clear;
memStream.WriteBuffer(Count, SizeOf(Count));
memStream.CopyFrom(DestStream, 0);
memStream.Position := 0 ;
finally
DestStream.Free;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtDlgs, ExtCtrls, Buttons, shellapi,zlib,
jpeg;type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Image1: TImage;
BitBtn3: TBitBtn;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
BitBtn1: TBitBtn;
Button1: TButton;
Edit4: TEdit;
procedure BitBtn3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
count:int64;
implementation{$R *.dfm}procedure TForm1.BitBtn3Click(Sender: TObject);
var
fname:string;//文件全名
fextract:string;//文件扩展名
fstream:tfilestream;
target,outstream:tmemorystream;
ys:TCompressionStream;
begin
if opendialog1.Execute then
begin
edit1.Text:=opendialog1.FileName;
fextract:=ExtractFileExt(opendialog1.FileName);
fname:=copy(ExtractFileName(opendialog1.FileName),0,length(ExtractFileName(opendialog1.FileName))-4);
fstream:=tfilestream.Create(opendialog1.FileName,fmOpenRead or fmShareExclusive);
count:=fstream.Size;
target:=tmemorystream.Create;
target.Seek(0,sofromend);
target.CopyFrom(fstream,fstream.Size);//转到内存流
fstream.Free;
target.Seek(SoFromBeginning,0);
outstream:=tmemorystream.Create;
outstream.Size:=target.Size;
ys:=TCompressionStream.Create(clfastest,outstream);
ys.copyfrom(target,target.size);
outstream.Position:=0;
outstream.SaveToFile(ExtractFilePath(ParamStr(0))+'file\'+fname+'.ash');
target.Free;
ys.Free;
outstream.Free;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
if directoryexists(ExtractFilePath(ParamStr(0))+'file')=false then //判断文件夹是否存在
CreateDirectory(pchar(ExtractFilePath(ParamStr(0))+'file'),nil); //创建文件夹
end;procedure TForm1.Button1Click(Sender: TObject);
var
jy:TdeCompressionStream;
target:tmemorystream;
fstream:tfilestream;
buf:pchar;
begin
target:=tmemorystream.Create;
fstream:=tfilestream.Create(ExtractFilePath(ParamStr(0))+'file\点表.ash',fmopenread);
jy:=TdeCompressionStream.Create(fstream);
jy.Position:=0;
target.Clear;
target.Position:=0;
getmem(buf,count);
try
begin
jy.ReadBuffer(buf^,count);
target.WriteBuffer(buf^,count);
target.Position:=0;
target.SaveToFile(ExtractFilePath(ParamStr(0))+'file\aa.doc');
end;
finally
begin
freemem(buf);
jy.Free;
fstream.Free;
target.Free;
end;
end;
end;end.
和TdeCompressionStream
是对应 的 不支持拆分解压