AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Unerwarteter OutOfMemory-Fehler
Thema durchsuchen
Ansicht
Themen-Optionen

Unerwarteter OutOfMemory-Fehler

Ein Thema von blablab · begonnen am 6. Okt 2010 · letzter Beitrag vom 8. Okt 2010
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: Unerwarteter OutOfMemory-Fehler

  Alt 8. Okt 2010, 13:57
Wenn man von einer Datei einen MD5-Hash erstellt und dazu nochmal einen CRC32 und diese beiden Werte gleich sind nebst der Größe, dann kann man die Datei getrost als gleich ansehen

Für einen direkten Vergleich der dann noch vorhandenen Dateien kann man mittels FileStream lösen indem dann Byte für Byte verglichen wird. Dazu werden die Dateien aber nicht in den Speicher geladen.

BTW. es gibt da Backup-Programme, die sehr gut funktionieren, die entscheiden darüber, ob die Datei schon gesichert ist oder nicht über Hash-Werte.
Delphi-Quellcode:
uses IdHash, IdHashMessageDigest;

{...}

function MD5FromFile( const FileName : string ) : string;
  var
    idmd5 : TIdHashMessageDigest5;
    fs : TFileStream;
  begin
    idmd5 := TIdHashMessageDigest5.Create;
    fs := TFileStream.Create( FileName, fmOpenRead or fmShareDenyWrite );
    try
      Result := idmd5.HashStreamAsHex( fs );
    finally
      fs.Free;
      idmd5.Free;
    end;
  end;
oder hier die ganz genaue Variante mit MD5, CRC32 und Größe
Delphi-Quellcode:
uses IdHash, IdHashMessageDigest;

{...}

function MD5H32SizeFromFile( const FileName : string ) : string;
  var
    idmd5 : TIdHashMessageDigest5;
    idh32 : TIdHash32;
    fs : TFileStream;
  begin
    idmd5 := TIdHashMessageDigest5.Create;
    idh32 := TIdHash32.Create;
    fs := TFileStream.Create( FileName, fmOpenRead or fmShareDenyWrite );
    try
      fs.Position := 0;
      Result := idmd5.HashStreamAsHex( fs );
      fs.Position := 0;
      Result := Result + idh32.HashStreamAsHex( fs );
      Result := Result + IntToHex( fs.Size, 8 );
    finally
      fs.Free;
      idmd5.Free;
      idh32.Free;
    end;
  end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Okt 2010 um 14:07 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 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