Autor Beitrag
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 05.08.02 18:08 
Hallo,

Ich habe ein Problem mit meinem Code. Und zwar habe ich ein Test-Programm geschrieben, um die Funktionsweise zu überprüfen, bevor ich die Funktionen in das richtige Programm einbinde.
Nach Button1.Click packt das Programm einen String in eine Datei. Nach Button2.Click liest es die Datei aus und dekomprimiert sie.
Aber genau in der Dekomprimierungs-Prozedur ist ein Fehler drin, den ich noch nicht gefunden habe:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var
  SFS2: tFileStream;
  SCFS2: TBZDecompressionstream;
  clearstream: tFileStream;
  text: WideString;

begin
  SFS2 := tFileStream.Create('C:\comp_test.test', fmOpenRead);
  SFS2.Seek(0, soFromBeginning);
  SCFS2 := TBZDecompressionStream.Create(SFS2);
  SCFS2.Read(text, SFS2.Size);
  clearstream := tFileStream.Create('c:\comp_clear.test', fmCreate);
  clearstream.Seek(0, soFromBeginning);
  clearstream.Write(PChar(text)^, Length(text));                   //Hier ist der Fehler
  clearstream.Free;
  SCFS2.Free;
  SFS2.Free;
end;



Das mit dem Stream-im-Stream ist richtig und beim Packen geht's auch, nur eben beim Entpacken nicht. Der Fehler geschieht aber seltsamerweise erst nach dem Entpacken, wenn ich versuche den String in eine andere Datei zu schreiben (überprüft durch die Step- und Trace-Funktionen in Delphi). Erkennt einer den Fehler?

Die Fehlermeldung, die Delphi ausgibt besagt, daß mein Programm eine "EAccessViolation"-Exception in Addresse 40007334 in Modul RTL60.BPL erhoben hat. Wodurch diese Zugriffs-Verletzung nun entsteht, weiß ich nicht. Die Datei "comp_clear.test" existiert und auch im angegebenen Verzeichnis (\). Sie bleibt aber durch den Fehler leer (Länge von 0 Bytes, kein Inhalt).

Es kann aber kein genereller Fehler beim Schreiben sein, denn wie schon gesagt, beim Komprimieren, schreibt er auch in einen Stream (Datei "comp_clear.test").

Falls es einer schon erkannt hat: Die Stream-Klassen kommen von einem anderen Post von mir ("bzip2, nur wie?", in "Dateizugriff") und sind theoretisch fehlerfrei, da sie aus dem Internet heruntergeladen sind. Der Link auf "bzip2, nur wie" ist nicht mehr gültig, da der angegebene Provider (userhp.com) pleite gemacht hat.
Daher ist die Datei BZIP2.PAS jetzt auf
www.nelie.org/tommielie/BZIP2.PAS (wieder auf GROß- und klein-Schreibung achten)
verfügbar. Den Link in dem anderen Post werde ich auch gleich noch ändern.
Wer sich also die Stream-Klasse "TBZDecompressionStream" anschauen will, kann das bei nelie.org tun.

Bye
tommie-lie

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
tommie-lie Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mi 07.08.02 18:56 
News:
Ich habe lange dran rumgetüftelt und rausgefunden, daß es nicht nur beim Dekomprimierungs-Stream so ist, sondern auch wenn ich einen ganz normalen Stream lese. Dann tritt exakt das gleiche Problem auf. (Ab und zu an anderen Addressen).
Weiß jetzt einer vielleicht Rat?

tommie-lie

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert