function CompFile(const f1,f2: string): Boolean; var ms1,ms2: TMemoryStream; i,p: Integer; b1,b2: Byte; begin Result := False; if not (FileExists(f1) and FileExists(f2)) then Exit; ms1 := TMemoryStream.Create; ms2 := TMemoryStream.Create; ms1.LoadFromFile(f1); ms2.LoadFromFile(f2); if ms1.Size <> ms2.Size then begin ms1.Free; ms2.Free; Exit; end; Result := True; Randomize; for i := 0 to 9 do begin p := Random(ms1.Size); ms1.Position := p; ms2.Position := p; ms1.ReadBuffer(b1,1); ms2.ReadBuffer(b2,1); if b1 <> b2 then begin Result := False; Break; end; end; ms1.Free; ms2.Free; end;根据 "峪飞鹰" 的指点, 略作修改; 不过暂不用 CompareMem 对比所有内存了, 10 次抽样可能会更快一点.
function CompFile(const f1,f2: string): Boolean; var fs1,fs2: TFileStream; ms: TMemoryStream; i,p: Integer; b1,b2: Byte; begin Result := False; if not (FileExists(f1) and FileExists(f2)) then Exit; fs1 := TFileStream.Create(f1, fmOpenRead); fs2 := TFileStream.Create(f2, fmOpenRead); if fs1.Size <> fs2.Size then begin fs1.Free; fs2.Free; Exit; end; Result := True; Randomize; for i := 0 to 9 do begin p := Random(fs1.Size); fs1.Position := p; fs2.Position := p; fs1.ReadBuffer(b1,1); fs2.ReadBuffer(b2,1); if b1 <> b2 then begin Result := False; Break; end; end; fs1.Free; fs2.Free; end;