Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descarga Con Indy (https://www.clubdelphi.com/foros/showthread.php?t=89302)

gdlrinfo 29-10-2015 19:45:19

Descarga Con Indy
 
Hola amigos estoy descargando archivos con indy tengo una duda hay manera de hacer que mientras descargue si encuentra el archivo en el directorio no lo baje ?
estoy usando un código como este !!

Código Delphi [-]
  FTP.ChangeDir('/siga/');
   Lista := TStringList.create;
   FTP.List(Lista,'*.*',false);
    try
       for i := 0 to Lista.Count - 1 do
      begin
         if FileExists('C:\P\' + Lista.Strings[i]) then
            Lista.Strings[i+1]; /// Aca cuando llega al ultimo da error !
         FTP.Get(Lista.Strings[i], 'C:\P\' + Lista.Strings[i], true);
      end;
    finally
      FTP.Disconnect;
      FTP.Free;
      Lista.Free;
Desde ya muchas gracias por su ayuda.-

roman 29-10-2015 19:56:30

Realmente la pregunta no tiene nada que ver con Indy. Quita la línea de Lista.Strings[i+1] y deja la llamada a Get dentro del condicional.

// Saludos

Lepe 29-10-2015 20:05:38

... negando el FileExists... por supuesto.

Código Delphi [-]
         if NOT FileExists('C:\P\' + Lista.Strings[i]) then
           FTP.Get(Lista.Strings[i], 'C:\P\' + Lista.Strings[i], true);


Saludos!

roman 29-10-2015 20:15:41

Cierto Lepe :). Creo que la intención de gdlrinfo era saltarse el paso si el archivo existía. Lo cual puede hacerse con un continue y es lo que iba a proponerle pero al ver que había sólo una sentencia decidí que era má fácil englobarla en el condicional y fue donde se me olvido el NOT :o

// Saludos

gdlrinfo 30-10-2015 13:40:23

Gracias
 
Claro Roman esa era mi intención pero tal cual dice LEPE funciona perfecto Muy agradecido por su ayuda gran abrazo!;)

gdlrinfo 02-11-2015 23:18:21

Comparar por tamaño.-
 
Buenas he llegado a terminar el código dejándolo así:
Código Delphi [-]
begin
  FTP := TIdFTP.Create( nil );
  FTP.OnWork := IdFTPWork;
  FTP.Username := Usuario;
  FTP.Password := Pss;
  FTP.Host := ftph;
  A:=0;
   try
    FTP.Connect;
  except
    raise Exception.Create( 'No se ha podido conectar con el servidor ' + FTP.Host );
  end;
  //ProgressBar.max := FTP.Size(Lista.Strings[i]) div 1024;
  sigefa.ProgressBar.max := 100;
  if FTP.Connected then
     Begin
//showMessage('EstoyConectado a:'+ftp.Host);
   FTP.ChangeDir('/imagenes/credenciales/'+dir+'/');
   Lista := TStringList.create;
   FTP.List(Lista,'*.*',false);
    try
      for i := 0 to Lista.Count - 1 do
      begin
          if NOT FileExists('C:\Re\'+dir+'\' + Lista.Strings[i]) then
           Begin
           Label3.Caption:= Lista.Strings[i];
           Label3.Refresh;
           FTP.Get(Lista.Strings[i], 'C:\re\'+dir+'\' + Lista.Strings[i], true);
           A:=a+1;
           ProgressBar.Position:=100;
           End;
      end;
    finally
      FTP.Disconnect;
      FTP.Free;
      Lista.Free;
    end;
    ProgressBar.Position:=0;
    Label3.Caption:='....';
    Memo1.Lines.Add(FormatDateTime('hh:nn:ss', Now())+': Archivos de '+dir+' Descargados desde '+ftph+' Cantidad Total: '+InttoStr(A));
   End
  else
  BEGIN
      showmessage('No estoy conectado a:'+ftp.Host);
  END;


funciona de maravilla me gustaría saber si se puede comparar si algún archivo fue modificado y que lo actualice es decir modificado en el servidor.-
Desde ya muchas gracias

roman 03-11-2015 18:03:41

Cita:

Empezado por gdlrinfo (Mensaje 498761)
me gustaría saber si se puede comparar si algún archivo fue modificado y que lo actualice es decir modificado en el servidor.-
Desde ya muchas gracias

Podrías comparar las fechas de modificación de los archivos. Me parece que en el listado del directorio remoto puedes examinar la fecha sin necesidad de descargar el archivo. Así, sólo descargarías los que haya que actualizar.

// Saludos

gdlrinfo 04-11-2015 19:27:19

Cita:

Empezado por roman (Mensaje 498802)
Podrías comparar las fechas de modificación de los archivos. Me parece que en el listado del directorio remoto puedes examinar la fecha sin necesidad de descargar el archivo. Así, sólo descargarías los que haya que actualizar.

// Saludos

Hola Roman gracias por el dato veré como puedo compararla nunca hice eso voy a buscar info gracias !!!

gdlrinfo 04-11-2015 19:56:45

Funcion de modificación de archivos
 
Estimados he estado probando con el
Código Delphi [-]
FileDateToDateTime(FileAge(Nombre_de_fichero))
pero al parecer en el fichero del ftp no le permite acceder nose porque motivo .-

alguna idea bienvenida !!! jaja atte. Gonzalo

roman 04-11-2015 20:23:27

Bueno, no puedes aplicar funciones delphi a archivos remotos.

En tu llamada

Código Delphi [-]
FTP.List(Lista,'*.*',false);

pon en true el tercer parámetro para que el listado incluya detalles. La lista de archivos y sus detalles puedes examinarla en la propiedad DirectoryListing del componente IdFTP.

Uno de los detalles incluirá la fecha del archivo remoto y ésa es la que comparas con la fecha del archivo local.

// Saludos


La franja horaria es GMT +2. Ahora son las 06:00:20.

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