Entwickler-Ecke

Dateizugriff - ZLIB -> TDecompressionStream.Read


Mike_C - Mo 28.10.02 14:02
Titel: ZLIB -> TDecompressionStream.Read
Wie kann ich einen Stream, den ich mit einem TCompressionStream aus der Unit ZLIB komprimiert habe wider dekomprimieren?
Es gibt einen TDecompressionstream mit eine Methode Read; nur wenn ich die verwende, bekomme ich keinen gescheiten Output, besser gesagt ich bekomme immer das gleich Ergebnis, egal was ich reinschreibe.

Hat jemand damit erfahrung?


Mike_C - Mo 28.10.02 15:32

Meine Lesen-Routine sieht bisher so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure TForm1.btnUnZIPClick(Sender: TObject);
var ZIPStream: TDecompressionStream;
    SrcStream: TMemoryStream;
    Buffer: string[200];
    s: string;

    size : integer;
begin
  SrcStream := TMemoryStream.Create;
  SrcStream.LoadFromFile(ExtractFilePath(Application.Exename)+'Test.file');
  ZIPStream := TDecompressionStream.Create(SrcStream);

  Size := SrcStream.Size;

  ZIPStream.Seek(0,soFromBeginning);

  s := '';
  while ZIPStream.Position < ZIPStream.Size do begin
    Buffer := '';
    ZIPStream.ReadBuffer(Buffer,200);
    s := s+Buffer;
    dec(size,200);
    ZipStream.Seek(0,soFromCurrent);
  end;

  ZIPStream.Free;
  SrcStream.Free;
  Memo1.Text := s;
end;


Allerdings bekomme ich dabei die Exception:
Invalid Stream operation. Read from Adress $FFFFFF

Ich frag mich nur warum?
Wenn ich ZIPStream.Position < ZIPStream.Size abfrage müsste ich doch herausinden, ob ich am Ende vom Stream bin oder nicht.
:roll: :?: :( :?: