cpp
// get las folder from ftp path String getLastFTPDir( String Dir ) { // eliminando el caracter / final if ( Dir[Dir.Length( )] == '/' ) Dir.Delete( Dir.Length( ), 1 ); while ( Dir.Pos( '/' ) != 0 ) Dir = Dir.Delete( 1, Dir.Pos( '/' ) ); return Dir; } //remove dir void removeFTPDir (String Dir, TIdFTP *ftp){ static int counter = 0; //ir a la carpeta que se desea eliminar while (Dir.Pos('/')!=0){ ftp->ChangeDir(Dir.SubString(1,Dir.Pos('/'))); if(Dir.Pos('/')!=Dir.Length()) Dir = Dir.Delete(1,Dir.Pos('/')); else Dir = Dir.Delete(Dir.Pos('/'),Dir.Length()); } //listar ftp ftp->List("",true); //obtener si es file or folder int listCount = ftp->DirectoryListing->Count; String fileName; if(listCount > 0){ for(int i = 0; i < listCount; i++){ //get item TIdFTPListItem *listItem = ftp->DirectoryListing->Items[i]; fileName = listItem->FileName; //file if(listItem->ItemType == ditFile){ ftp->Delete(fileName); if(listCount - 1 == i){ ftp->ChangeDirUp(); if(counter>0)counter--; Dir = getLastFTPDir(Dir); removeFTPDir(Dir,ftp); } } if(listItem->ItemType == ditDirectory){ counter++; ftp->ChangeDir(fileName); Dir = fileName; removeFTPDir(Dir,ftp); } } }else{ if(counter > 0){ ftp->ChangeDirUp(); counter--; ftp->RemoveDir(Dir); Dir=getLastFTPDir(ftp->RetrieveCurrentDir()); removeFTPDir(Dir,ftp); }else{ ftp->ChangeDirUp(); ftp->RemoveDir(Dir); } } }