对比两个文件是否相同的函数
作者:互联网
对比两个文件是否相同的函数
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;posted on 2008-08-12 14:56 万一 阅读(4285) 评论(9) 编辑 收藏
标签:文件,begin,end,函数,ms2,Free,fs1,ms1,对比 来源: https://blog.51cto.com/u_14617575/2747838