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);
我覺得效率好低,所以我想請高手幫一下忙,不勝感激。

解决方案 »

  1.   

    CompressedStream.SaveToFile('c:\Test1.tmp');
    改为
      CompressedStream.SaveToStream(oFile);
    看可行不
      

  2.   

    本来压缩就是针对流的呀,你的memorystream不要savetofile,解压的时候直接用来解就成了。
    比如你上面的CompressedStream后面是一个压缩后的流,你要解压请看:var
      nSize:Int64;  //注意,要是你原来用的integer,这里就用integerbegin
     ...           //压缩后假定你的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里面就是解压的内容了
      ...  
      
      

  3.   

    抱歉,上面直接用手敲出了些错var
      nSize:Int64;  //注意,要是你原来用的integer,这里就用integerbegin
     ...           //压缩后假定你的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里面就是解压的内容了