Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2007
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Comparación binaria de 2 archivos...

Hola colegas....
hace bastante tiempo que no aparezco por acá, espero todos sigan tan bien como antes. Estoy alejado varios años de la programación y tengo un pequeño problemita que quiero resolver con un pequeño programa.. hacerlo en delphi obviamente.
Necesito comparar binariamente 2 archivos. Esto para saber si son idénticos o no.
Estoy tratando de usar la función CompareMem.. pero hasta ahora no logro dar en el clavo con su uso.

Gracias por cualquier aporte.
__________________
Si es Chileno.. es bueno.
Responder Con Cita
  #2  
Antiguo 02-04-2007
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
Podrias usar el TFileStream, usas 2 y vas comparando los buffers de lectura
Responder Con Cita
  #3  
Antiguo 02-04-2007
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Correle un hash (o un crc) a ambos archivos y comparas si son iguales... a menos que necesites un diff no hay que complicarse mas.
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 02-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si necesitas un "diff" de esos que dice Casimiro puede interesarte estudiar el código fuente del componente "TDiff" de Angus Johnson.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 02-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Un poco de codigo

Código Delphi [-]
function CompareFiles(strUno, strDos: String): boolean;
var
  Uno, Dos: TFileStream;
  BufUno, BufDos: Pointer;
  BytesRead: Integer;
begin
  Result:= FALSE;
  Uno:= TFileStream.Create(strUno,fmOpenRead or fmShareDenyWrite);
  try
    Dos:= TFileStream.Create(strDos,fmOpenRead or fmShareDenyWrite);
    try
      if Uno.Size = Dos.Size then
      begin
        GetMem(BufUno,10*1024);
        try
          GetMem(BufDos,10*1024);
          try
            while  TRUE do
            begin
              BytesRead:= Uno.Read(BufUno^, 10*1024);
              if (BytesRead <> Dos.Read(BufDos^, 10*1024)) then
                break;
              if BytesRead = 0 then
              begin
                Result:= TRUE;
                break;
              end;
              if not CompareMem(BufUno,BufDos,BytesRead) then
                break;
            end;
          finally
            FreeMem(BufDos);
          end;
        finally
          FreeMem(BufUno);
        end;
      end;
    finally
      Dos.Free;
    end;
  finally
    Uno.Free;
  end;
end;


// Por ejemplo
ShowMessage(BoolToStr(CompareFiles('c:\1.zip','c:\2.zip'),TRUE));

Y si te decides por el hash, muy útil si los dos archivos están en equipos distintos, aquí puedes encontrar una unit para calcularlo.
http://www.clubdelphi.com/foros/show...22&postcount=4
Responder Con Cita
  #6  
Antiguo 02-04-2007
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Gracias Milenario,
Estaba probando otras funciones pero tu ejemplo me sirvió perfectamente.

Cita:
Empezado por seoane
Un poco de codigo


Código Delphi [-]
function CompareFiles(strUno, strDos: String): boolean;
var
Uno, Dos: TFileStream;
BufUno, BufDos: Pointer;
BytesRead: Integer;
begin
Result:= FALSE;
Uno:= TFileStream.Create(strUno,fmOpenRead or fmShareDenyWrite);
try
Dos:= TFileStream.Create(strDos,fmOpenRead or fmShareDenyWrite);
try
if Uno.Size = Dos.Size then
begin
GetMem(BufUno,10*1024);
try
GetMem(BufDos,10*1024);
try
while TRUE do
begin
BytesRead:= Uno.Read(BufUno^, 10*1024);
if (BytesRead <> Dos.Read(BufDos^, 10*1024)) then
break;
if BytesRead = 0 then
begin
Result:= TRUE;
break;
end;
if not CompareMem(BufUno,BufDos,BytesRead) then
break;
end;
finally
FreeMem(BufDos);
end;
finally
FreeMem(BufUno);
end;
end;
finally
Dos.Free;
end;
finally
Uno.Free;
end;
end;


// Por ejemplo
ShowMessage(BoolToStr(CompareFiles('c:\1.zip','c:\2.zip'),TRUE));





Y si te decides por el hash, muy útil si los dos archivos están en equipos distintos, aquí puedes encontrar una unit para calcularlo.
http://www.clubdelphi.com/foros/show...22&postcount=4
__________________
Si es Chileno.. es bueno.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comparación archivos planos... n3mohack Varios 4 15-11-2005 22:03:55
label dinamicos, arreglos busqueda x metodo lineal y binaria. VB.net sakuragi .NET 0 28-09-2005 06:34:09
Suma binaria CHiCoLiTa Varios 3 06-05-2005 12:17:59
Comparacion entre archivos TheBearWhite Varios 1 29-07-2004 12:27:55
Comparacion entre archivos TheBearWhite Varios 1 14-06-2004 20:13:20


La franja horaria es GMT +2. Ahora son las 03:46:53.


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
Copyright 1996-2007 Club Delphi