Ver Mensaje Individual
  #10  
Antiguo 06-07-2011
NEG1414 NEG1414 is offline
Miembro
 
Registrado: mar 2007
Posts: 177
Reputación: 18
NEG1414 Va por buen camino
...... He conseguido hacer lo que queria bajarme las carpetas y subcarpetas del Hosting, supongo qur habra una manera mucho mas facil de Hacerlo pero a mi me vale... la pongo por si a alguien le sirve
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{

  Ftp = new TIdFTP(NULL);

  AnsiString PathApp  = ExtractFilePath(Application->ExeName);
  AnsiString CTemp = PathApp + "Temp\\";
  mkdir(CTemp.c_str());

  Ftp->Host     = "host.com";
  Ftp->Username = "1234567";
  Ftp->Password = "*******";

  //Conecto con servidor
  try
  {
    Ftp->Connect();
    if(Ftp->Connected())
     {
       try
         {
           Ftp->ChangeDir("/Principal"); //Carpeta Principal
           //Actualizo//
           NewCarpeta(CTemp);
           //Desconecto
           Ftp->Disconnect();
         }
         catch (...)
         {
           if (MessageDlg("No se han podido actualizar los Datos",
           mtError,TMsgDlgButtons() << mbOK, 0) == mrOk){return;}
         }
     }
  }
  catch (...)
  {
     if (MessageDlg("No ha sido posible establecer la conexion",
     mtError,TMsgDlgButtons() << mbOK, 0) == mrOk){return;}
  }

  delete Ftp;Ftp = NULL;
}

//-----------------------------------------------------------------------//

void  TForm1::NewCarpeta(AnsiString Path)
{


     std::auto_ptr<TStringList> Elementos (new TStringList);
     Ftp->List(Elementos.get());
     int NumElemnt = Ftp->DirectoryListing->Count;
     bool *IsDir = new  bool[NumElemnt];

     //Conozco cuales son sus Subcarpetas
     for (int i=2;i<NumElemnt;i++)
      {
        TIdFTPListItem*  ListItem = Ftp->DirectoryListing->Items[i];
        Elementos->Strings[i] = ListItem->FileName;
        IsDir[i]=ListItem->ItemType == ditDirectory;
      }

     //Copio 
     for (int i=2;i<NumElemnt; i++)
        {
            //Si es una SubCarpeta
            if(IsDir[i])
              {
                Ftp->ChangeDir(Elementos->Strings[i]);
                mkdir((Path+Elementos->Strings[i] + "\\").c_str());
                NewCarpeta(Path+Elementos->Strings[i] + "\\");
              }
              else
              {
                 //Bajo Archivo
                AnsiString Copia = Path + Elementos->Strings[i];
                Ftp->Get(Elementos->Strings[i],Copia,true);  
              }
        }

   Ftp->ChangeDirUp();
}
Gracias
Responder Con Cita