![]() |
Dekomprimierung eines Streams
Hallo Wissende,
ich bin mal wieder am verzweifeln. Weshalb lässt sich der Stream nicht dekomprimieren?
Delphi-Quellcode:
Er bringt mir immer den Fehlercode 5 (System Error, Zugriff verweigert). Nur warum und was kann man gegen tun?
{Dekompremiert den Stream}
procedure DecrompressStream(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); //<< Hier kommt der Fehler finally ms.Free; end; end; Edit: Es handelt sich mal wieder um die ZLib, Fehlerstelle gekennzeichnet Grüße Greeny |
Re: Dekomprimierung eines Streams
sicher, daß .CopyFrom(..., 0) korrekt so ist?
|
Re: Dekomprimierung eines Streams
Sicher? Zwischenzeitlich nicht mehr...
aber der Fehler kommt hier:
Delphi-Quellcode:
scheint also nicht wirklich damit zusammenzuhängen :|
aStream.Size := 0;
|
Re: Dekomprimierung eines Streams
was ist denn in aStream für ein Stream drinnen?
nicht jeder StreamTyp unterstützt alle Befehle [add] und wegen der 0 in CopyFrom ... da gibt man Count an, also die Anzahl der zu kopierenden Bytes ... bei dir also NICHTS |
Re: Dekomprimierung eines Streams
Hallo,
dies ist ein TFileStream, welcher einen zuvor Komprimierten Stream enthält. Dieser soll wieder DeKomprimiert und verarbeitet werden. Daher auch die ganze hin- und herkompiererei. Igendwo, scheint der Wurm drin zu sein. |
Re: Dekomprimierung eines Streams
Zitat:
Ups, Fehlerstelle falsch markiert: hier kommt er aStream.Size := 0; also eine Zeile früher. Das kommt davon, wenn man ständig am kämpfen ist |
Re: Dekomprimierung eines Streams
ok, dann arbeite ich wohl zu selten mit Stream :oops: (dachte das war bei -1)
ja, wie gesagt, was für einen Stream übergibst du denn nun der Prozedur? |
Re: Dekomprimierung eines Streams
Zitat:
Was soll ich da erst sagen, Streams brauchte ich bisher noch nie, nur dieses mal, komme ich irgendwie nicht dran vorbei :| |
Re: Dekomprimierung eines Streams
|
Re: Dekomprimierung eines Streams
gibt TDecompressionStream den aStream vielleicht frei?
:gruebel: ich hab es jetzt mal so versucht unb scheitere schon beim 1. CopyFrom, also beim Komprimieren
Delphi-Quellcode:
[edit] Fehler im CompressStream behoben (Source und Dest sozusagen vertauscht) geht aber dennoch nicht
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. [edit2] OK, komprimieren geht nun :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz