Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TStream.CopyFrom verändert Quellstream?! (https://www.delphipraxis.net/46237-tstream-copyfrom-veraendert-quellstream.html)

xineohp 21. Mai 2005 00:01


TStream.CopyFrom verändert Quellstream?!
 
hi,

Ich beschäftige mich gerade zum ersten Mal mit Streams. Dabei tritt gerade folgendes Problem auf:
die Funktion function TStream.CopyFrom(Source: TStream; Count: Int64): Int64; scheint den Quell Stream zu veränderen?!

1. Ich lade eine Datei mit FStream.LoadFromFile(Filename) in einen tMemoryStream.
2. Dann kopiere ich den Stream mit FStream2.CopyFrom(FStream, FStream.Size) in einen zweiten Stream.
3. Zu guter Letzt bilde ich dann mit dem DEC den MD4-Hash über den ersten Stream.

Wenn ich jetzt den zweiten Schritt weglasse/auskommentiere verändert sich die Hashsumme, wie kann das sein? :gruebel:

Christian Seehase 21. Mai 2005 00:31

Re: TStream.CopyFrom verändert Quellstream?!
 
Moin Peter,

hast Du auch daran gedacht die Eigenschaft Position immer wieder auf 0 zu setzen, damit, z.B., von Beginn des Streams an kopiert wird?

xineohp 21. Mai 2005 07:28

Re: TStream.CopyFrom verändert Quellstream?!
 
Wenn du meinst, ob ich die Position nach dem Kopieren (aber vor dem Hashen) wieder auf 0 gesetzt habe, dann könntest du recht haben, ich glaube das hab ich vergessen. Allerdings hätte ich erwartet, dass das in der Hashfunktion automatisch geschieht :gruebel:

EDIT:
OK, daran lag es. Ich hätte ja auch vorher auf die Idee kommen können mal im DEC-Code nachzuschaun ...
Zitat:

Zitat von DEC
Delphi-Quellcode:
    if StreamSize < 0 then
 {if Size < 0 then reset the Position, otherwise, calc with the specific
  Size and from the aktual Position in the Stream}
    begin
      Stream.Position := 0;
      StreamSize := Stream.Size;
    end;

Danke für den Denkanstoß

Robert Marquardt 21. Mai 2005 07:36

Re: TStream.CopyFrom verändert Quellstream?!
 
Eine Funktion die auf einem Stream arbeitet sollte die Position nicht vor der Verarbeitung veraendern.
Im Extremfall unterstuetzt der Stream das garnicht, sprich er hat weder Anfang noch Ende.
Es geht auch darum das man moeglicherweise eine Funktion implementieren will die nur einen Teil des Streams verarbeiten will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz