![]() |
AW: Unerwarteter OutOfMemory-Fehler
Hab ich auch schon dran gedacht, aber ich find das ist nicht unbedingt nötig. Wenn es wirklich immer zum OutOfMemory käme, würde ich es mit Hash probiern (auch wenn ich mich damit nicht auskenne). Aber da das ja eher eine Ausnahmesituation ist reicht es mir so. Mir ist es dann nur wichtig, dass es nicht zu einem Fehler kommt und das Programm dann abstürzt.
|
AW: Unerwarteter OutOfMemory-Fehler
Zitat:
|
AW: Unerwarteter OutOfMemory-Fehler
Stimmt, hast du ein Vorschlag was noch ein Kriterium sein könnte?
|
AW: Unerwarteter OutOfMemory-Fehler
Moin,
naja ein Hash erstellen, wenn der immer noch gleich ist, die Dateien bitweise überprüfen. Außerdem kannst du nicht alle Dateien in den RAM laden, wenn ich hier schon sehe, das ich teilweise Dateien von 11 GiB Größe habe. MfG Fabian |
AW: Unerwarteter OutOfMemory-Fehler
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:
oder hier die ganz genaue Variante mit MD5, CRC32 und Größe
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;
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 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