Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Descargar solo txt FTP (https://www.clubdelphi.com/foros/showthread.php?t=85770)

ronald_tro 30-04-2014 20:36:16

Descargar solo txt FTP
 
Hola, estoy haciendo una aplicación que permite descargar archivos con FTP, mi código es este:

Código Delphi [-]
var
I: integer;
begin
for I:= 0 to ftp.DirectoryListing.Count-1 do
begin
   FTP.Get(FTP.DirectoryListing[i].FileName, Ç:\carpetadestino\' + FTP.DirectoryListing[i].FileName );
    Barra.Position:=Barra.Position+1;

Quisiera saber como hacer para que solo lea los archivos por ejemplo .txt y si se puede por ejemplo los archivos que inicien con la letra A___.txt y tengan la extensión .txt, gracias

egostar 30-04-2014 23:34:01

Hola,

Lo que yo he hecho al respecto es obtener el listado de archivos filtrados y una vez conociendo los archivos ya puedo realizar el GET. Algo así:

Código Delphi [-]
var
  Lista: TStringList;
begin
  Lista := TStringList.create;
  FTP.List(Lista,'A*.txt',false);
  for I := 0 to Lista.Count - 1 do
  begin
    FTP.Get(Lista.Strings[i], NombreDestino, true);
  end;
end;

Saludos

ronald_tro 30-04-2014 23:43:55

Nombre destino estaría entre comillas?

ronald_tro 30-04-2014 23:49:37

Puse asi:

Código Delphi [-]
Var Lista: TStringList;
    i : Integer;
begin
Lista := TStringList.create;
FTP.List(Lista,'A*.txt',false);
for I := 0 to Lista.Count - 1 do
begin
FTP.Get(Lista.Strings[i], 'K:\carpetadescarga\', true);
end;

Me marca que no encuentra el destino

egostar 30-04-2014 23:52:50

Cita:

Empezado por ronald_tro (Mensaje 475902)
Puse asi:

Código Delphi [-]
Var Lista: TStringList;
    i : Integer;
begin
Lista := TStringList.create;
FTP.List(Lista,'A*.txt',false);
for I := 0 to Lista.Count - 1 do
begin
FTP.Get(Lista.Strings[i], 'K:\carpetadescarga\', true);
end;

Me marca que no encuentra el destino

Hola

Necesitas el nombre del archivo

Código Delphi [-]
FTP.Get(Lista.Strings[i], 'K:\carpetadescarga\' + Lista.Strings[i], true);

Saludos

ronald_tro 30-04-2014 23:59:55

Codigo completo:

Código Delphi [-]
Var Lista: TStringList;
    i : Integer;
begin
Lista := TStringList.create;
FTP.List(Lista,'A*.txt',false);
for I := 0 to Lista.Count - 1 do
begin
FTP.Get(Lista.Strings[i], 'K:\carpetadescarga\' + Lista.Strings[i], true);
end;
Me arroja la siguiente pantalla:

egostar 01-05-2014 00:42:09

Pues eso me parece que está obteniendo también la estructura de directorios, habrá que validar que exista un nombre de archivo antes de descargarlo.

Saludos

nlsgarcia 01-05-2014 01:17:19

ronald_tro,

Cita:

Empezado por ronald_tro
...estoy haciendo una aplicación que permite descargar archivos con FTP...

Revisa esta información:
Espero sea útil :)

Nelson.

nlsgarcia 01-05-2014 02:28:53

ronald_tro,

Cita:

Empezado por ronald_tro
...estoy haciendo una aplicación que permite descargar archivos con FTP...

Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   FTP: TIdFTP;
   Lista: TStringList;
   i : Integer;

begin

   FTP := TIdFTP.Create(nil);
   FTP.Username := txtUsername.Text;
   FTP.Password := txtPassword.Text;
   FTP.Host := txtHost.Text;

   try
      FTP.Connect;
   except
      raise Exception.Create( 'No se ha podido conectar con el servidor ' + FTP.Host );
   end;

   FTP.ChangeDir('/');

   Lista := TStringList.create;
   FTP.List(Lista,'Text*.txt',false);

   try

      for i := 0 to Lista.Count - 1 do
      begin
         if FileExists('C:\FTPServerBackup\' + Lista.Strings[i]) then
            DeleteFile('C:\FTPServerBackup\' + Lista.Strings[i]);
         FTP.Get(Lista.Strings[i], 'C:\FTPServerBackup\' + Lista.Strings[i], true);
      end;

   finally

      FTP.Disconnect;
      FTP.Free;
      Lista.Free;

   end;

end;
El código anterior en Delphi 7 y Indy 9 bajo Windows 7 Professional x32, permite hacer un FTP Get a todos los archivos 'Text*.txt' del directorio home del servidor FTP y descargarlos en el directorio 'C:\FTPServerBackup\' con el mismo nombre de archivo.

Espero sea útil :)

Nelson.

ronald_tro 01-05-2014 17:08:46

Hola, me sigue saliendo la misma ventanita, creo que está tomando todo porque lo que me deposita en la carpeta de descarga es lo siguiente:

type=file;modify=20140430192558;size=84157; A10384005005400400

donde A10384005005400400 es el archivo txt pero no solo es uno el que existe en la carpeta de ftp, ademas que me deja el documento vacío

ronald_tro 01-05-2014 17:17:38

No será que el problema esté aqui?

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

nlsgarcia 01-05-2014 17:24:18

ronald_tro,

Cita:

Empezado por ronald_tro
...me sigue saliendo la misma ventanita...

Pregunto:

1- ¿Probastes el código del Msg #9?.

2- ¿Puedes publicar el código completo del FTP?.

El código del Msg #9 fue probado con el Servidor FTP FileZilla Server funcionado correctamente según lo esperado.

Espero sea útil :)

Nelson.

ronald_tro 01-05-2014 17:36:09

Si, he cambiado el código que tenía por este:
Código Delphi [-]
var
   FTP: TIdFTP;
   Lista: TStringList;
   i : Integer;
begin
 FTP := TIdFTP.Create(nil);
   FTP.Username := '***';
   FTP.Password := '***';
   FTP.Host := '***';
   try
      FTP.Connect;
   except
      raise Exception.Create( 'No se ha podido conectar con el servidor ' + FTP.Host );
   end;
   //FTP.ChangeDir('/');

   Lista := TStringList.create;
   FTP.List(Lista,'A*.txt',false);
   try

      for i := 0 to Lista.Count - 1 do
      begin
         if FileExists('K:\descarga\' + Lista.Strings[i]) then
            DeleteFile('K:\descarga\' + Lista.Strings[i]);
         FTP.Get(Lista.Strings[i], 'K:\descarga\' + Lista.Strings[i], true);
      end;
        finally

      FTP.Disconnect;
      FTP.Free;
      Lista.Free;

   end;

En mi ftp tengo archivos que inician con la letra A y son extension .txt , al momento de ejecutar obtengo esta ventana



El archivo que me descarga está vacío y es el siguiente


Debo de tener instalado Servidor FTP FileZilla Server?

nlsgarcia 01-05-2014 17:47:28

ronald_tro,

Cita:

Empezado por ronald_tro
...Si, he cambiado el código que tenía por este (Msg #9)...

Pregunto:

1- ¿Haz hecho un debug para ver el funcionamiento del código y ver si efectivamente se conecta al servidor FTP y si se obtiene la lista de los archivos 'A*.txt'?

2- ¿Haz hecho un FTP manual (Vía cmd) para verificar la conexión al servidor y la accesibilidad de los archivos requeridos?

Espero sea útil :)

Nelson.

ronald_tro 01-05-2014 17:57:39

Bueno lo he resuelto pero de diferente forma, hice una función como esta
Código Delphi [-]
function download(texto : string): Integer;
var
  valor: Integer;
begin
    valor:= 0;
    if (Copy(texto, 1, 1) = 'm') and (Copy(texto, Length(texto) - 2, 3) = 'txt') then
    begin
        valor:= 1
    end;
    Result := valor;
end;

Después lo que hice es esto, en el botón de descargar
Código Delphi [-]
var
I: integer;
Lista : tStringList;
begin
 for i:= 0 to FTP.DirectoryListing.Count-1 do
begin

    if download(FTP.DirectoryListing[i].FileName) = 1 then
            begin
                  FTP.Get(FTP.DirectoryListing[i].FileName, 'C:\descargas\' + FTP.DirectoryListing[i].FileName );
                     end;


    end;


end;

Y listo, funciona, aunque no encontré de la otra forma, espero que a alguien le sirva

nlsgarcia 01-05-2014 18:09:35

ronald_tro,

Cita:

Empezado por ronald_tro
...lo he resuelto pero de diferente forma...

:) ^\||/

Pregunto: ¿Que versión de Delphi e Indy utilizas?.

Nelson.

ronald_tro 01-05-2014 18:14:54

Cita:

Empezado por nlsgarcia (Mensaje 475937)
ronald_tro,


:) ^\||/

Pregunto: ¿Que versión de Delphi e Indy utilizas?.

Nelson.

Delphi 2009, la version de Indy la que trae el mismo Delphi

nlsgarcia 01-05-2014 18:22:05

ronald_tro,

Cita:

Empezado por ronald_tro
...Delphi 2009, la version de Indy la que trae el mismo Delphi...

Te comento que probé el código del Msg #9 en Delphi 7 y Delphi 2010 y funciono correctamente según lo esperado.

Espero sea útil :)

Nelson.

ronald_tro 01-05-2014 18:25:38

Cita:

Empezado por nlsgarcia (Mensaje 475939)
ronald_tro,


Te comento que probé el código del Msg #9 en Delphi 7 y Delphi 2010 y funciono correctamente según lo esperado.

Espero sea útil :)

Nelson.

Lo probaré en 2010 y comento, gracias


La franja horaria es GMT +2. Ahora son las 00:51:36.

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