...... 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