function CompareFiles(Filename1,FileName2:string):longint; {Сравнение файлов возвращает номер несовпадающего байта, (байты отсчитываются с 1)или: 0 - не найдено отличий, -1 - ошибка файла 1 -2 - ошибка файла 2 -3 - другие ошибки} const Buf_Size=16384; var F1,F2:TFileStream; i:longint; Buff1,Buff2:PByteArray; BytesRead1,BytesRead2:integer; begin Result:=0; try F1:=TFileStream.Create(FileName1,fmShareDenyNone); except Result:=-1; exit; end; try F2:=TFileStream.Create(FileName2,fmShareDenyNone); except Result:=-2; F1.Free; exit; end; GetMem(Buff1,Buf_Size); GetMem(Buff2,Buf_Size); try if F1.Size>F2.Size then Result:=F2.Size+1 else if F1.SizeF1.Position) and (Result=0) do begin BytesRead1 :=F1.Read(Buff1^,Buf_Size); BytesRead2 :=F2.Read(Buff2^,Buf_Size); if (BytesRead1=BytesRead2) then begin for i:= 0 to BytesRead1-1 do begin if Buff1^[i]<>Buff2^[i] then begin result:=F1.Position-BytesRead1+i+1; break; end; end; end else begin Result:=-3; break; end; end; end; except Result:=-3; end; F1.Free; F2.Free; FreeMem(Buff1,Buf_Size); FreeMem(Buff2,Buf_Size); end; |