var
FileName : string;
ScrStream : TFileStream; // DestStream
DestStream : TMemoryStream;
Compress : TDecompressionStream;
iCount: int64;
Buffer : PChar;
begin
if OpenDialog.Execute then
begin
FileName :=OpenDialog.FileName;
ScrStream := TFileStream.Create(FileName,fmOpenRead);
DestStream := TMemoryStream.Create;
ScrStream.Position := 0;
try ScrStream.ReadBuffer(Buffer,iCount);
GetMem(Buffer,iCount); Compress := TDecompressionStream.Create(ScrStream);
Compress.ReadBuffer(Buffer^,iCount); ////在这就报错啊,怎么办,谁帮帮我啊 DestStream.WriteBuffer(Buffer^,iCount);
DestStream.Position := 0;
// if DestStream.Size > 0 then
//DestStream.SaveToFile('test.exe'); finally
ScrStream.Free;
DestStream.Free;
end;
end;
FileName : string;
ScrStream : TFileStream; // DestStream
DestStream : TMemoryStream;
Compress : TDecompressionStream;
iCount: int64;
Buffer : PChar;
begin
if OpenDialog.Execute then
begin
FileName :=OpenDialog.FileName;
ScrStream := TFileStream.Create(FileName,fmOpenRead);
DestStream := TMemoryStream.Create;
ScrStream.Position := 0;
try ScrStream.ReadBuffer(Buffer,iCount);
GetMem(Buffer,iCount); Compress := TDecompressionStream.Create(ScrStream);
Compress.ReadBuffer(Buffer^,iCount); ////在这就报错啊,怎么办,谁帮帮我啊 DestStream.WriteBuffer(Buffer^,iCount);
DestStream.Position := 0;
// if DestStream.Size > 0 then
//DestStream.SaveToFile('test.exe'); finally
ScrStream.Free;
DestStream.Free;
end;
end;
解决方案 »
- 退出线程函数后,该线程是不是就结束了?
- 利用华为API发送WAPPUSH问题(CMPP2.0),Delphi开发
- ADO的Locate与Lookup方法有什么区别啊?
- 谨祝:比民工略强的IT工作者五一节日快乐[第一名顶贴者得分:)]
- 求助有关DBGrid显示格式问题??大侠请进!!!(在线等待,马上给分)
- 安装Delphi8要求安装.net framework1.1,安装后还是不行?
- 菜鸟问题:保存时为什么老是丢失后缀为dcu的文件
- 我在编程中遇到的问题,请网上的朋友帮忙
- 怎样使窗口程序最小化到系统栏呢?
- 这样的SQL SERVER 数据库 误操作 还能恢复吗?高手请进
- 哪儿有delphi + asp.net 的demo下载?
- 求货币数字输入组件
ScrStream.ReadBuffer(Buffer,iCount);
GetMem(Buffer,iCount);
//改成如下:
iCount := ScrStream.Size + 1;
GetMem(Buffer,iCount);
ScrStream.ReadBuffer(Buffer,iCount);
var
ZStream: TCompressionStream;
InStream:TMemoryStream;
TempStream:TMemoryStream;
BStream:TMemoryStream;
Param:OleVariant;
p:Pointer;
pi:Pointer;
pj:Pointer;
bSize:int64;
begin
InStream:=TMemoryStream.Create;
BStream:=TMemoryStream.Create;
TempStream:=TMemoryStream.Create;
pi:=VarArrayLock(Stream);
try
TempStream.Write(pi^,VarArrayHighBound(Stream,1)+1);
ZStream:=TCompressionStream.Create(cldefault, InStream);
try
ZStream.CopyFrom(TempStream,0);
finally
ZStream.Free;
end;
Param:=VarArrayCreate([0,InStream.Size-1+sizeof(bSize)],varByte);
p:=VarArrayLock(Param);
try
pj:=Addr(bSize);
bSize:=TempStream.Size;
BStream.Write(pj^,sizeof(bSize));
BStream.Position:=sizeof(bSize);
InStream.Position:=0;
BStream.CopyFrom(InStream,InStream.Size);
bstream.Position:=0;
BStream.Read(p^,BStream.Size);
finally
VarArrayUnlock(Param);
end;
finally
VarArrayUnlock(Stream);
InStream.Free;
TempStream.Free;
BStream.Free;
end;
Stream:=Param;
end;
procedure TFilePacket.UnPackStream(var Stream: OleVariant);
var
TempStream:TMemoryStream;
OutStream:TMemoryStream;
ZStream: TDecompressionStream;
BStream:TMemoryStream;
Param:OleVariant;
p:Pointer;
po:Pointer;
bSize:int64;
pj:Pointer;
begin
TempStream:=TMemoryStream.Create;
BStream:=TMemoryStream.Create;
OutStream:=TMemoryStream.Create;
p:=VarArrayLock(Stream);
try
TempStream.Write(p^,VarArrayHighBound(Stream,1)+1);
pj:=Addr(bSize);
TempStream.Position:=0;
TempStream.Read(pj^,sizeof(bSize));
TempStream.Position:=sizeof(bSize);
if TempStream.Size>0 then BStream.CopyFrom(TempStream,TempStream.Size-sizeof(bSize));
BStream.Position:=0;
ZStream:=TDecompressionStream.Create(BStream);
zstream.Position:=0;
try
OutStream.CopyFrom(ZStream,bSize);
Param:=VarArrayCreate([0,OutStream.Size-1],varByte);
po:=VarArrayLock(Param);
try
OutStream.Position:=0;
OutStream.Read(po^,OutStream.Size);
finally
VarArrayUnlock(Param);
end;
finally
ZStream.Free;
end;
finally
VarArrayUnlock(Stream);
BStream.Free;
OutStream.Free;
TempStream.Free;
end;
Stream:=Param;
end;