關於壓縮后的處理問題,特急。

ZXYSOSO 2007-07-16 11:15:10
oFile:= TFileStream.Create('C:\AllTest.txt', fmOpenReadWrite);

DestStream := TMemoryStream.Create;
CompressedStream:= TMemoryStream.Create;
CompressedStream.LoadFromFile('C:\Test.txt');

SourceStream:=TCompressionStream.Create(clDefault, DestStream);
CompressedStream.SaveToStream(SourceStream);
SourceStream.Free;
CompressedStream.Clear;

CompressedStream.CopyFrom(DestStream, 0);
CompressedStream.SaveToFile('c:\Test1.tmp');

這是一段壓縮的代碼,我希望是當把'C:\Test.txt'壓縮后,不用存到硬盤上當作臨時'c:\Test1.Tmp',
而是直接把壓縮流write入流oFile中

如果每次用CompressedStream.SaveToFile('c:\Test1.tmp');再oFile1:= TFileStream.Create('c:\Test1.tmp', fmOpenReadWrite);
oFile.CopyForm(oFile1,0);
我覺得效率好低,所以我想請高手幫一下忙,不勝感激。
...全文
94 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mygodsos 2008-06-20
  • 打赏
  • 举报
回复
抱歉,上面直接用手敲出了些错

var
nSize:Int64; //注意,要是你原来用的integer,这里就用integer

begin
... //压缩后假定你的Deststream没有释放
DestStream.clear;//准备用这个来输出解压的东西
CompressedStream.Seek(0,soFromBeginning);
CompressedStream.Read(nSize,SizeOf(nSize));//读出源流的大小
DestStream.SetSize(nSize);
SourceStream:=TDecompressionStream.Create(CompressedStream);
SourceStream.ReadBuffer(DestStream.Memory^,nSize);//解压到目标流,DestStream里面就是解压的内容了

mygodsos 2008-06-20
  • 打赏
  • 举报
回复
本来压缩就是针对流的呀,你的memorystream不要savetofile,解压的时候直接用来解就成了。
比如你上面的CompressedStream后面是一个压缩后的流,你要解压请看:

var
nSize:Int64; //注意,要是你原来用的integer,这里就用integer

begin
... //压缩后假定你的sourceStream、Deststream都没有释放
DestStream.clear;//准备用这个来输出解压的东西
CompressedStream.Seek(0,0,soFromBeginning);
CompressedStream.Read(nSize,SizeOf(nSize));
DestStream.SetSize(nSize);
SourceStream:=TDecompressionStream.Create(CompressedStream);
SourceStream.ReadBuffer(DestStream.Memory^,nSize);//解压到目标流,DestStream里面就是解压的内容了
...
僵哥 2007-07-17
  • 打赏
  • 举报
回复
CompressedStream.SaveToFile('c:\Test1.tmp');
改为
CompressedStream.SaveToStream(oFile);
看可行不
huayufei 2007-07-17
  • 打赏
  • 举报
回复
UP学习

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧