Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Comparar archivos (https://www.clubdelphi.com/foros/showthread.php?t=26750)

ElDioni 02-11-2005 17:38:16

Comparar archivos
 
Hola mi pregunta es si existe alguna función por código para poder comparar el contenido de dos archivos, de cualquier tipo de extensión o del mayor numero de extensiones posibles, si alguien conoce alguna función o como se podría hacer me resultaría de gran ayuda.
Gracias
pd. No me interesa que compare las fechas de creacion o de modificacion de los archivos o el nombre de estos, solamente el contenido.

dec 02-11-2005 18:33:45

Hola,

No estoy seguro, pero, ¿no te valdría obtener el "Hash" de un determinado archivo? Me explico. Si no me equivoco el "Hash" de un archivo es único, incluso si se comparan dos archivos con el mismo nombre, por poner un caso. Ya digo que no estoy muy puesto en esto, como en casi nada. Desde luego, con los componentes DCPcrypt Cryptographic Component Library, gratuitos y de código abierto (y probablemente encuentres otros componentes) puedes hacer lo dicho, en inglés, "File hashing", de tal forma que podrías comparar si dos archivos tienen el mismo "Hash". En la documentación (documento HTML de nombre "Hashes.html") tienes un ejemplo completo.

delphi.com.ar 02-11-2005 18:48:50

Es algo básico, pero tiene que funcionar (Probalo, lo escribí e hice dos pruebas sencillas nada mas):
Código Delphi [-]
function CompareStreams(AStream1, AStream2: TStream): boolean;
var
  Buff1, Buff2: Pointer;
  iCount: LongInt;
const
  BUFFER_SIZE = 1024*4;
begin
  if AStream1.Size <> AStream2.Size then
    Result := False
  else
  begin
    Result := True;
    GetMem(Buff1, BUFFER_SIZE);
    GetMem(Buff2, BUFFER_SIZE);
    try
      repeat
        iCount := AStream1.Read(Buff1^, BUFFER_SIZE);
        AStream2.Read(Buff2^, BUFFER_SIZE);
        if not CompareMem(Buff1, Buff2, iCount) then
        begin
          Result := False;
          break;
        end;
      until iCount < BUFFER_SIZE;
    finally
      FreeMem(Buff1);
      FreeMem(Buff2);
    end;
  end;
end;

function CompareFiles(AFileName1, AFileName2: TFileName): boolean;
var
  FS1, FS2: TFileStream;
begin
  FS1 := TFileStream.Create(AFileName1, fmOpenRead + fmShareDenyNone);
  try
    FS2 := TFileStream.Create(AFileName2, fmOpenRead + fmShareDenyNone);
    try
      Result := CompareStreams(FS1, FS2);
    finally
      FS2.Free;
    end;
  finally
    FS1.Free;
  end;
end;

Código Delphi [-]
  if CompareFiles('C:\FILE1.TXT', 'C:\FILE2.TXT') then
    Caption := 'Los archivos son iguales'
  else
    Caption := 'Los archivos son diferentes';

Saludos!

dec 02-11-2005 18:55:24

Hola,

Sí que parece funcionar Federico, muy curioso, muchas gracias. ;)


La franja horaria es GMT +2. Ahora son las 06:17:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi