Ver Mensaje Individual
  #7  
Antiguo 09-11-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Reputación: 27
eduarcol Va por buen camino
gracias Xesk, estaba pensando en algo similar. He quedado en algo como esto:

Código Delphi [-]
unit unPricipal;

***

type

  //Hilo que compara los MD5 de los archivos
  TCompararMd5 = class(TThread)
     protected
        procedure Execute; override;
  end;

  //Formulario de soporte visual
  TfrActualizador = class(TForm)
    ***
  private
    { Private declarations }
    ***
  public
    { Public declarations }
    ***
  end; 

var
  nIdx: Integer;

//Compara los MD5 del archivo local y web y devuelve true o false
procedure TCompararMd5.Execute;
var
   aStream: TMemoryStream;
   cLocal: String;
   cWeb: TStringList;
   nIndice: Integer;
begin
   inherited;
   //Toma el MD5 del archivo local
   nIndice := nIdx; //Toma el valor de nIdx para que al ejecutarse otro hilo asegurarse que continua el mismo valor
   aStream := TMemoryStream.Create;
   cWeb    := TStringList.Create;
   try
      cLocal := AnsiUpperCase(MD5Sum(cRutaLocal.Strings[nIndice] + '\' + cArchivo.Strings[nindice]));
      if (Get(cHtml.Strings[nIndice] + '/pMd5.php?archivo=' + cArchivo.Strings[nIndice], aStream)) and (cLocal <> '') then
      begin
         aStream.Position:= 0; // <-- Hay que rebobinar el stream :-D
         cWeb.LoadFromStream(aStream);
         cWeb.Strings[0] := AnsiupperCase(cWeb.Strings[0]);
         //Compara el md5 del local con el web
         Resultado := cLocal = cWeb.Strings[0];
      end
      else
         Resultado := False;
   finally
      FreeandNil(aStream);
      FreeandNil(cWeb);
   end;
end;

*****

//Procedimiento donde se crea y se llama el hilo
procedure TfrActualizador.pActualizar(nIndice: Integer);
var
   cUrl, cRuta: String;
   thcMd5: TCompararMd5;
begin
   //Crea el hilo para comparar los MD5
   thcMd5 := TCompararMd5.Create(True);
   nIdx := nIndice;
   thcMd5.Resume;
   //Actualiza el sistema desde internet
   if not Resultado then
   begin
      //Descargar el archivo de la web
      cUrl := cHtml.Strings[nIndice] + '/' + cArchivo.Strings[nIndice];
      cRuta := cRutaLocal.Strings[nIndice] + '\' + cArchivo.Strings[nIndice];
      Bajar(cUrl, cRuta);
   end;
end;

******

end.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita