Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.196 Beiträge
 
Delphi 12 Athens
 
#10

Re: Dekomprimierung eines Streams

  Alt 23. Aug 2009, 17:21
gibt TDecompressionStream den aStream vielleicht frei?


ich hab es jetzt mal so versucht unb scheitere schon beim 1. CopyFrom, also beim Komprimieren

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes, ZLib;

{Dekompremiert den Stream}
procedure DecompressStream(aStream: TStream);
var
  zc: TDecompressionStream;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
   zc := TDecompressionStream.Create(aStream);
   try
      ms.CopyFrom(zc, 0);
    finally
      zc.Free;
    end;
    aStream.Size := 0;
    aStream.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

{Kompremiert den Stream}
procedure CompressStream(aStream: TStream);
var
  zc: TCompressionStream;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    zc := TCompressionStream.Create(clDefault, ms);
    try
      zc.CopyFrom(aStream, 0);
    finally
      zc.Free;
    end;
    aStream.Size := 0;
    aStream.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

Var
  M: TMemoryStream;

begin
  M := TMemoryStream.Create;
  M.Write(M, 4); // irgendwas einlesen, damit was drin ist
  CompressStream(M);
  DecompressStream(M);
end.
[edit] Fehler im CompressStream behoben (Source und Dest sozusagen vertauscht) geht aber dennoch nicht
[edit2] OK, komprimieren geht nun
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat