Einzelnen Beitrag anzeigen

a.def
(Gast)

n/a Beiträge
 
#97

AW: DEC 5.2 String hashen?

  Alt 5. Mai 2017, 17:00
Zitat:
Mach's mit "Einen Teil des Files lesen" - "Hash weiter rechnen" - "Den nächsten Teil des Files lesen" - "Hash weiter rechnen" - "Den nächsten Teil des Files lesen" - "Hash weiter rechnen" - "Den nächsten Teil des Files lesen" - "Hash weiter rechnen" - .
Was ich hierbei nicht verstehe... kommt das nicht auf dasselbe raus? Wird hier am Ende nicht auch die ganze Datei eingelesen?

Auszüge aus meinem Code aktuell (den ich auch verstehe). Hier wird der Hash am Ende der Datei gespeichert/geladen:
Delphi-Quellcode:
// Hash setzen
sHash := THashFunctions_Selftest.CalcHash(Trim(TEncoding.ANSI.GetString(aByteStream.Bytes)));
aByteStream.Size := aByteStream.Size + iHashLengthInBytes;
Move(AnsiString(sHash)[1], aByteStream.Bytes[aByteStream.Size - iHashLengthInBytes], iHashLengthInBytes);
aByteStream.SaveToFile(aFileName);
Delphi-Quellcode:
// Dateiinhalt lesen und den Hash bilden
if aByteStream.Size > iHashLengthInBytes then
 begin
  aByteStream.Read(aByteStream.Bytes[0], aByteStream.Size - iHashLengthInBytes);
  Result := THashFunctions_Selftest.CalcHash(Trim(TEncoding.ANSI.GetString(aByteStream.Bytes, 0, aByteStream.Size - iHashLengthInBytes)));
 end
else
 Result := '';
Delphi-Quellcode:
// Am Ende der Datei stehenden Hash auslesen
if aByteStream.Size > iHashLengthInBytes then
 begin
  aByteStream.Position := aByteStream.Size - iHashLengthInBytes;
  aByteStream.Read(aByteStream.Bytes[0], iHashLengthInBytes);
  Result := Trim(TEncoding.ANSI.GetString(aByteStream.Bytes, 0, iHashLengthInBytes));
 end
else
 Result := '';
aByteStream.LoadFromFile(aFileName); wird nur ein einziges Mal ausgeführt, da ich die aktuelle Stream-Instanz immer an den Funktionsaufruf übergebe. Die drei Dinger da oben sthen alle in einer Funktion in der natürlich entschieden wird was man gerade abarbeiten will.

Vielleicht bin ich etwas naiv, dumm bin ich so oder so. Aber wenn beim Programmstart eines ~5MB Programms etwas auf die Festplatte ausgelagert wird, dann sollte sich der PC-Nutzer vielleicht mal Sorgen machen womit er seinen Arbeitsspeicher vollmüllt.

Ich würde gerne deinen Code übernehmen Michael. Aber ich verstehe ihn leider nicht und würde bald auch wieder vergessen was er macht. Mein Code ist zwar vielleicht nur 50% i.O. aber ich verstehe ihn.

Und bevor du dich wieder aufregst p80286, ja. Ich würde gerne vom String weg. Aber a) meinen Code beibehalten und b) vom String weg, das klappt bei mir halt nicht.
Die Lösung da oben funktioniert absolut 1A bisher.