Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Kontrollera om två filer är likadana
|
Kategori: Filer
Inlagt: 2005-04-26
Läst: 1285
Inlagt av: Staffan Berg
|
Beskrivning |
Denna funktion kontrollerar om två angivna filer är identiska.
|
Kod |
function Are2FilesEqual(const File1, File2: TFileName): Boolean; var ms1, ms2: TMemoryStream; begin Result := False; ms1 := TMemoryStream.Create; try ms1.LoadFromFile(File1); ms2 := TMemoryStream.Create; try ms2.LoadFromFile(File2); if ms1.Size = ms2.Size then Result := CompareMem(ms1.Memory, ms2.memory, ms1.Size); finally ms2.Free; end; finally ms1.Free; end end; procedure TForm1.Button1Click(Sender: TObject); begin if Opendialog1.Execute then if Opendialog2.Execute then if Are2FilesEqual(Opendialog1.FileName, Opendialog2.FileName) then ShowMessage('Files are equal.'); end; {********************************************} {2.} function FilesAreEqual(const File1, File2: TFileName): Boolean; const BlockSize = 65536; var fs1, fs2: TFileStream; L1, L2: Integer; B1, B2: array[1..BlockSize] of Byte; begin Result := False; fs1 := TFileStream.Create(File1, fmOpenRead or fmShareDenyWrite); try fs2 := TFileStream.Create(File2, fmOpenRead or fmShareDenyWrite); try if fs1.Size = fs2.Size then begin while fs1.Position < fs1.Size do begin L1 := fs1.Read(B1[1], BlockSize); L2 := fs2.Read(B2[1], BlockSize); if L1 <> L2 then begin Exit; end; if not CompareMem(@B1[1], @B2[1], L1) then Exit; end; Result := True; end; finally fs2.Free; end; finally fs1.Free; end; end;
|
|
|