Announcement

Collapse
No announcement yet.

Problem mit zLib

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit zLib

    Hallo,<br>
    Wie kann ich mit der der zLib dateien Packen und entpacken<br>
    oder nur ansehen.<br>
    Währe nett wenn es gleich mit Beispiel währe<br>
    Gruß <b>Michael</b>

  • #2
    Hallo Michael,<br>
    auf der Companion CD zu Delphi befindet sich im zlib Verzeichnis eine Datei mit dem Namen<br>
    Test.pas. Da steht ein Beispiel drin.<br>
    Aber Achtung: zlib ist nicht kompatibel zu Winzip/PkZip. <br>
    Noch mehr Achtung: Die mit D5 ausgelieferte Version der zLib unit ist fehlerhaft.<br>
    Die Dekompression klappt nicht. Da ich glückerlicherweise auch D4 besitze, habe ich die zLib<br>
    unit von der D4 Companion CD genommen. Damit klappt alles prima.<br>
    Jens Schumann<br&gt

    Comment


    • #3
      Hallo Michael,<br>
      ich habe mein Testprogramm wiedergefunden.<br>
      Damit kannst Du Dateien komprimieren und dekomprimieren. Die komprimierten Dateien<br>
      lassen sich aber nicht mit WinZip bearbeiten.<br>
      <pre>
      <font face="Verdana" size="1" color="#000000">unit Unit1;

      interface

      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Buttons, StdCtrls;

      type
      TForm1 = class(TForm)
      Label1: TLabel;
      Edit1: TEdit;
      SpeedButton1: TSpeedButton;
      OD: TOpenDialog;
      btnCompress: TButton;
      btnDecompress: TButton;
      Label2: TLabel;
      Label3: TLabel;
      Label4: TLabel;
      Label5: TLabel;
      Label6: TLabel;
      Label7: TLabel;
      procedure SpeedButton1Click(Sender: TObject);
      procedure btnCompressClick(Sender: TObject);
      procedure btnDecompressClick(Sender: TObject);
      private
      { Private-Deklarationen }
      FFilename : String;
      procedure OnZLibProgress(Sender : TObject);
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      uses zlib, Utils1; // zlib.pas in der D4 Version !!!!!

      {$R *.DFM}

      Const

      ZLibBufferSize = 4096;

      var
      ZLibBuffer : Array[0..ZLibBufferSize-1] of Byte;

      procedure TForm1.SpeedButton1Click(Sender: TObject);
      begin
      If not OD.Execute then Exit;
      Edit1.Text:=OD.Filename;
      FFilename:=Edit1.Text;
      end;

      procedure TForm1.btnCompressClick(Sender: TObject);
      var
      ZStream : TCustomZLibStream;
      Indata : TStream;
      OutData : TStream;
      OutFilename : String;
      begin
      OutFilename:=ApplicationPath+ExtractFilename(FFile name);
      Outfilename:=ChangeFileExt(OutFilename,'.zip');
      Label2.Caption:=OutFilename;
      Application.ProcessMessages;
      InData:=TFileStream.Create(FFilename,fmOpenRead);
      OutData:=TFileStream.Create(OutFilename,fmCreate);
      ZStream:=TCompressionStream.Create(clDefault,OutDa ta);
      TCompressionStream(ZStream).OnProgress:=OnZLibProg ress;
      Screen.Cursor:=crHourGlass;
      Try
      ZStream.CopyFrom(Indata,0);
      Finally
      Indata.Free;
      ZStream.Free;
      OutData.Free;
      Screen.Cursor:=crDefault;
      end;
      end;

      procedure TForm1.btnDecompressClick(Sender: TObject);
      var
      FileExtension : String;
      ZStream : TCustomZLibStream;
      Indata : TStream;
      OutData : TStream;
      OutFilename : String;
      iCount : Integer;
      begin
      FileExtension:='.';
      If InputQuery('Dateiextension','Extension',FileExtens ion) then
      begin
      OutFilename:=ChangeFileExt(FFilename,FileExtension );
      Label2.Caption:=OutFilename;
      Application.ProcessMessages;
      Try
      Indata:=TFileStream.Create(FFilename,fmOpenRead);
      OutData:=TFileStream.Create(OutFilename,fmCreate);
      ZStream:=TDeCompressionStream.Create(Indata);
      TDeCompressionStream(ZStream).OnProgress:=OnZLibPr ogress;
      Screen.Cursor:=crHourGlass;
      iCount:=ZLibBufferSize;
      While True do
      begin
      iCount:=ZStream.Read(ZLibBuffer,ZLibBufferSize);
      If iCount&lt;&gt;0 then
      OutData.Write(ZLibBuffer,iCount)
      else
      Break;
      Label4.Caption:=IntToStr(iCount);
      Label6.Caption:=IntToStr(OutData.Size);
      Application.ProcessMessages;
      end;
      Finally
      ZStream.Free;
      Indata.Free;
      OutData.Free;
      Screen.Cursor:=crDefault;
      end;
      end;
      end;

      procedure TForm1.OnZLibProgress(Sender: TObject);
      begin
      lAbel7.Caption:=IntToStr(StrToInt(Label7.Caption)+ 1);
      Application.ProcessMessages;
      end;

      end.
      </font></pre&gt

      Comment


      • #4
        Und das Formular<br>
        <pre>
        <font face="Verdana" size="1" color="#000000">object Form1: TForm1
        Left = 208
        Top = 333
        Width = 404
        Height = 166
        Caption = 'Zipper'
        Color = clBtnFace
        Font.Charset = ANSI_CHARSET
        Font.Color = clWindowText
        Font.Height = -11
        Font.Name = 'Arial'
        Font.Style = []
        OldCreateOrder = False
        PixelsPerInch = 96
        TextHeight = 14
        object Label1: TLabel
        Left = 4
        Top = 8
        Width = 27
        Height = 14
        Caption = 'Datei:'
        end
        object SpeedButton1: TSpeedButton
        Left = 359
        Top = 24
        Width = 23
        Height = 22
        Caption = '...'
        Font.Charset = ANSI_CHARSET
        Font.Color = clWindowText
        Font.Height = -19
        Font.Name = 'Arial'
        Font.Style = [fsBold]
        ParentFont = False
        OnClick = SpeedButton1Click
        end
        object Label2: TLabel
        Left = 8
        Top = 52
        Width = 32
        Height = 14
        Caption = 'Label2'
        end
        object Label3: TLabel
        Left = 200
        Top = 84
        Width = 31
        Height = 14
        Caption = 'Count:'
        end
        object Label4: TLabel
        Left = 234
        Top = 84
        Width = 32
        Height = 14
        Caption = 'Label4'
        end
        object Label5: TLabel
        Left = 200
        Top = 108
        Width = 24
        Height = 14
        Caption = 'Size:'
        end
        object Label6: TLabel
        Left = 232
        Top = 108
        Width = 32
        Height = 14
        Caption = 'Label6'
        end
        object Label7: TLabel
        Left = 304
        Top = 107
        Width = 6
        Height = 14
        Caption = '0'
        end
        object Edit1: TEdit
        Left = 4
        Top = 24
        Width = 353
        Height = 22
        TabOrder = 0
        Text = 'Edit1'
        end
        object btnCompress: TButton
        Left = 8
        Top = 76
        Width = 75
        Height = 25
        Caption = 'Komprimieren'
        TabOrder = 1
        OnClick = btnCompressClick
        end
        object btnDecompress: TButton
        Left = 92
        Top = 76
        Width = 89
        Height = 25
        Caption = 'Dekomprimieren'
        TabOrder = 2
        OnClick = btnDecompressClick
        end
        object OD: TOpenDialog
        Filter = 'Alle Dateien|*.*'
        Title = 'Öffnen'
        Left = 236
        Top = 48
        end
        end</font>
        </pre>
        Die Unit Utils1 brauchst Du nicht. Dort wird die Variable ApplicationPath gesetzt. ApplicationPath kannst Du<br>
        mit ExtractFilePath(Application.Exename) ersetzen.<br>
        Jens Schumann<br&gt

        Comment


        • #5
          Danke....
          Gruß <b>Michael</b&gt

          Comment


          • #6
            Ich habe Ihre Proceduren getestet.Das Packen von Dateien<br>
            geht aber nicht das Entpacken.<br>
            Gruß <b>Michael</b&gt

            Comment


            • #7
              Hallo Michael,<br>
              das kann ich mir nicht vorstellen. Da es sich bei dem Programm, um ein Testprogramm handelt, dass aussschließlich für mich ist, könnte es sich um einen Bedienungsfehler handeln.<br>
              Wenn man eine Datei entpacken möchte, dann muß man in das Editfeld die Ziel-Dateiendung eingeben. Wenn Du die zLib unit, die mit D5 auf der Companion-CD ausgeliefert wurde verwendest, dann kann es auch nicht klappen. In dieser unit ist die Dekomprimierung fehlerhaft. Deshalb habe ich geschrieben, das man unbedingt die zLib unit, die mit D4 ausgeliefert wurde verwenden sollte. Wenn Du nur D6 hast, kann ich leider nicht helfen. Habe kein D6. Das der zLib Bug auf der D6 Companion CD (falls es eine solche gibt) behoben wurde halte ich für äußerst unwahrscheinlich. Da Borland ja noch nicht einmal in der Lage ist, die gröbsten Bugs aus D6 herauszuholen.<br>
              Jens Schumann<br&gt

              Comment


              • #8
                Ich habe nur Delphi 5 Standart<br>
                Gibt es eine Möklichkeit diese Unit zubekommen die kein Fehler hat<br>
                Gruß <b>Michael</b&gt

                Comment


                • #9
                  Hallo Michael,<br><br>
                  Versuch mal http://www.base2ti.com/zlib.htm<br><br>
                  Thomas Steinmaurer<br>
                  IBLogManager - The Logging Tool for Interbase/Firebird<br>
                  http://www.iblogmanager.co
                  Thomas Steinmaurer

                  Firebird Foundation Committee Member
                  Upscene Productions - Database Tools for Developers
                  Mein Blog

                  Comment

                  Working...
                  X