adwind escribió:Pero solo funciona para archivos binarios no?, probe con otros archivos y hago una minima modificacion y me manda a que son 3% iguales, cuando en realidad se modifican unos bytes nadamas :/.
La herramienta compara byte a byte, teniendo en cuenta el valor y posición de cada byte incluso la diferencia de tamaño entre ambos ficheros.
Si tenemos por ejemplo un fichero de 100 bytes, hacemos una copia del mismo y al nuevo le agregamos 1 byte (101 bytes), la herramienta dirá que son 99% iguales (99,009900990099%).
Todo es pura matemática compañero, no hay errores, solamente lo que quieras tener o no en cuenta a la hora de comparar.
Si esos ficheros son pequeños puedes hacer los cálculos manualmente, verás como obtienes el mismo resultado.
Fragmento del código:
Mostrar/Ocultar
Código: Seleccionar todo
Var Cad1, Cad2, Mayor, Menor: string; i, j, Resto: integer; Res: extended;
begin
if (edit1.Text = '') or (edit2.Text = '') then exit;
label1.Caption:= 'Comparando..';
application.ProcessMessages;
cad1:= leerfichero(edit1.text);
cad2:= leerfichero(edit2.text);
if length(cad1) >= length(cad2) then begin Mayor:= cad1; Menor:= Cad2; end;
if length(cad1) <= length(cad2) then begin Mayor:= cad2; Menor:= Cad1; end;
Resto:= Length(mayor) - Length(Menor);
j:= 0;
for i:= 1 to length(menor) do
if menor[i] = Mayor[i] then
inc(j);
Resto:= Resto + j;
Res:= (j / length(mayor)) * 100;
if checkbox1.Checked then Res:= trunc(res);
label1.Caption:= 'Los ficheros son ' + floattostr(res) + '% iguales.';
end;
De todos modos el source completo lo dejé
[Enlace externo eliminado para invitados] posteado por si lo quieres revisar ;)
//Edit
Mmmmmmmmmmmmmm me estas haciendo dudar xD