Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Descargar directorio desde un FTP (recursivamente) (https://www.clubdelphi.com/foros/showthread.php?t=71425)

radge 17-12-2010 17:03:36

Descargar directorio desde un FTP (recursivamente)
 
Buenas , estoy buscando la forma de descargar-me un directorio entero de un FTP y recrear-lo en local. Tengo algo del tipo

/directorio/
/directorio/sub1/
/directorio/sub2/
/directorio/sub3/

Y hago algo como esto

Código:

  listaFTP:= TStringList.Create;
  ftpRepositori.ChangeDir('/directorio/');
  ftpRepositori.List(listaFTP,'',true);
  //envés de usar el '*.*' usamos '' y así nos
  //devuelve los directorios que es lo que me interesa.

Pero una vez aquí no se como continuar.... la forma "larga" se me ocurre de comprobar si esta el directorio en local , sinó esta crearlo , recorrer el directorio fichero a fichero etc..etc...

He hecho un montón de busquedas a google con "delphi ftp download folder" , "delphi get directory from ftp" , ... y no encuentro nada y la verdad me extraña que nadie se haya encontrado con esto.

Por cierto yso Indy10 con delphi 7

gracias , radge

juank1971 18-12-2010 19:02:31

esta funcion esta programada con apuro pero te puede servir de algo
llena un arbol con el ftp, lo puedes adaptar a en lugar de llenar el arbol debes hacer un get recursivo, para subir al ftp es put y get para bajar

Código Delphi [-]
procedure TForm1.LlenaArbolDirectorioFTP(NodoA:TTreeNode;r:string);
var i,j:integer; Nodo,Nodo1:TTreeNode; n:string; t,t1:tstrings;
begin
  Nodo :=  TTreeNode.Create(nil); t:=tstringlist.Create ;
  t1:=tstringlist.Create ;
  with idftp1   do
    begin
     if connected then
      begin
        //raiz
          ExtListDir (t,r);
          ChangeDir(r);


       for I := 0 to DirectoryListing.Count - 1 do
        begin
         if DirectoryListing.Items[i].ItemType = ditDirectory then
          begin
            n:= DirectoryListing.Items[i].FileName;
            nodo := ArbolFTP.Items.AddChild(NodoA,n);
            nodo.ImageIndex := 0;nodo.SelectedIndex := 0;nodo.StateIndex := 2;
            //se mete y sale en las carpetas a ver si estan llenas o vacias
          end;//if DirectoryListing

         if DirectoryListing.Items[i].ItemType  = ditFile then
          begin
            nodo := ArbolFTP.Items.AddChild(NodoA,DirectoryListing.Items[i].FileName );
            nodo.ImageIndex := 3; nodo.SelectedIndex := 3;nodo.StateIndex := 2;
          end;//if DirectoryListing
        end;//for I :=
      end; // if connected
    end; // with datamodule2
    t.Free;
    t1.free;
end;

radge 21-12-2010 19:09:16

Muchas gracias , pero al probar la función se me queja en la linia

if DirectoryListing.Items[i].ItemType = ditDirectory then <== me dice [Error] MAIN.pas(111): Undeclared identifier: 'ditDirectory'

Debo definir alguna unit puede ser ? Tal como dije uso Indy 10 con delphi 7

muchas gracias , radge

juank1971 30-12-2010 16:24:51

disculpa la demora en la unit idftplist,
cuando te pase eso vas al menu search del delphi y en find in files escoges un directorio y buscas con el texto y le pones dentro la funcion que no sabes a que unit pertenece, en este caso la busquedas la arías en el directorio del delphi que tengas porque las indy las trae delphi, buscas en el directorio bin, de la version de delphi que tengas, y vas mirando las declaraciones .

salud y pesetas

juank1971 30-12-2010 16:31:45

de todas formas recuerda que la funcion trabaja con un componente de la paleta indy clients llamado tidftp que es el que debe usar todas las unit necesarias, y debes arrastrarlo a tu datamodule o a la form


La franja horaria es GMT +2. Ahora son las 00:08:18.

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