Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Dateien / Laufwerke (https://www.delphipraxis.net/41-library-dateien-laufwerke/)
-   -   Delphi Überprüfen ob zwei Dateien gleich sind (https://www.delphipraxis.net/6277-ueberpruefen-ob-zwei-dateien-gleich-sind.html)

Daniel B 5. Jul 2003 12:49


Überprüfen ob zwei Dateien gleich sind
 
Hallo,

hiermit kann man prüfen ob zwei Dateien gleich sind.
Delphi-Quellcode:
function CompareFiles(const sFileName1, sFileName2: String): Boolean;
var
  ms1, ms2: TMemoryStream;
begin
  Result := False;
  ms1 := TMemoryStream.Create;
  try
    ms1.LoadFromFile(sFileName1);
    ms2 := TMemoryStream.Create;
    try
      ms2.LoadFromFile(sFileName2);
      If ms1.size = ms2.size Then
        Result := CompareMem(ms1.Memory, ms2.memory, ms1.size);
    finally
      FreeAndNil(ms2);
    end;
  finally
    FreeAndNil(ms1);
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Opendialog1.Execute then
  begin
    if Opendialog2.Execute then
    begin
      if CompareFiles(Opendialog1.FileName, Opendialog2.FileName) then
        ShowMessage('Die Dateien sind gleich...')
      else
        ShowMessage('Die Dateien sind ungleich...');
    end;
  end;
end;
Grüsse, Daniel :hi:

Daniel 2. Jan 2004 17:59

Re: Überprüfen ob zwei Dateien gleich sind
 
Zusatz von unserem User "merovingian":



In dem Beitrag werden die Dateien nur in einen Stream geladen und der Größe verglichen. Dabei wir der Inhalt aber nicht überprüft. Mit dieser Funktion wird beides berücksichtigt:

Delphi-Quellcode:
function CompareFiles(const SrcPath1,SrcPath2:String):Integer;
var File1,File2:TFileStream;
    lCnt:Integer;
    Buff1,Buff2:Byte;
begin
try
 try
  Result:=0
  File1:=TFileStream.Create(SrcPath1,fmOpenRead or fmShareExclusive);
  File2:=TFileStream.Create(SrcPath2,fmOpenRead or fmShareExclusive);
  if File1.Size = File2.Size then
   begin
    for lCnt:=0 to (File1.Size-1) do
     begin
      File1.ReadBuffer(Buff1,1);
      File2.ReadBuffer(Buff2,1);
      if Buff1<>Buff2 then
       begin
        Result:=1;
        Exit;
       end;
     end;
   end
                             else
   begin
    Result:=1;
    Exit;
   end;
 except
  Result:=-1;
  end;
finally
 File1.Free;
 File2.Free;
end;
end;
Zitat:

Ergebnisse der Funktion:

0 -> Die Datein sind gleich
1 -> Die Datein sind ungleich
-1 -> Es ist ein Fehler aufgetreten
----------------------------------------------------------------------------------------------------

Andererseits bieten sich jedoch auch noch einige bekannt Hash-Verfahren wie SHA1, CRC32, CRC64, MD4, MD5 usw. an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:31 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