AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Überprüfen ob zwei Dateien gleich sind
Thema durchsuchen
Ansicht
Themen-Optionen

Überprüfen ob zwei Dateien gleich sind

Ein Thema von Daniel B · begonnen am 5. Jul 2003 · letzter Beitrag vom 2. Jan 2004
Antwort Antwort
Daniel B
(Gast)

n/a Beiträge
 
#1

Überprüfen ob zwei Dateien gleich sind

  Alt 5. Jul 2003, 12:49
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
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Überprüfen ob zwei Dateien gleich sind

  Alt 2. Jan 2004, 17:59
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Antwort Antwort

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 18:05 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