TcompressStream如何压缩数据流,望高手指教,问题解决马上结帖。

解决方案 »

  1.   

    http://perso.magic.fr/sleon/prog/libbzip2/Man/HowUse1.htmProcedure CompressFile (Src, Dest : String);
    Const
      BUFF      = $4000;
    Var
      CStream   : TCompressStream;
      InStream  : TFileStream;
      OutStream : TFileStream;
      x         : Integer;
      Buf       : array[0..BUFF] of Byte;
    Begin
      OutStream := nil;
      InStream  := nil;
      CStream   := nil;
      Try
      // Process 1.0 : Create the CompressionStream.
        InStream  := TFileStream.Create( Src, fmOpenRead OR fmShareDenyNone );
        OutStream := TFileStream.Create( Dest, fmCreate OR fmShareDenyWrite );
        CStream   := TCompressStream.Create(clBetter, OutStream, InStream.Size, Form1.OnProgress);
      // Process 1.1 : Compress the file with libbzip2.
        For x := 1 To (InStream.Size div BUFF) Do Begin
          InStream.ReadBuffer(Buf, BUFF); // IN   ----      CStream.Write      (Buf, BUFF); // OUT  <---/
        End;
        x := InStream.Size MOD BUFF;
        If (x>0) Then Begin
          InStream.ReadBuffer(Buf, x); // IN   ----      CStream.Write      (Buf, x); // OUT  <---/
        End;
      // Process 1.2 : Close the streams.
        CStream.Free  ; CStream   := nil;
        OutStream.Free; OutStream := nil;
        InStream.Free ; InStream  := nil;
      Except
        on n : Exception Do Begin
          If ( CStream  <> nil) Then   CStream.Free; // Clean exit
          If (OutStream <> nil) Then OutStream.Free;
          If ( InStream <> nil) Then  InStream.Free;
          If (n is Ebz2DATAError) Then MessageDlg(n.Message, mtError,[mbOk], 0)
            Else If (n is Ebz2MEMError) Then MessageDlg(n.Message, mtError,[mbOk], 0)
              Else If (n is Ebz2USERError) Then MessageDlg(n.Message, mtWarning,[mbOk], 0)
                Else MessageDlg('Internal Error', mtError,[mbOk], 0);
        End;
      End;
    End;
      

  2.   

    多谢指教,请问TCompressStream在delphi7编译报错 该如何处理,delphi7 中是有TcompressionStream ,没有TcompressStream,再次麻烦了。
      

  3.   

    read(buffer,size(count))
    write(buffer);