/* Compilar: Hbmk2 meuftpwin.prg -lhbtip */ Function Main() Local oFtp, cFile, cMsg, cPc, cOpc Local cLogin := // coloque aqui seu login Local cSenha := // coloque aqui sua senha Local cServidor := // ftp.Servidor.com.br, ou www.Servidor.com.br // vamos montar a linha de comando para conexão... Local cUserIdFtp := "ftp://"+cLogin+":"+cSenha+"@"+cServidor Clear Screen oFtp := TIpClientFtp():new( cUserIdFtp, .T. ) If !oFtp:open() ? oFtp:lastErrorMessage() Return EndIf // barra de progresso para ver o desenrolar... oFtp:exGauge := ( @FtpProgress() ) // vamos se posicionar na Raiz... ? oFtp:cwd(""), oFtp:cReply // vamos criar uma pasta chamada meuftpwin... // se ela existir, ignora e retorna .F., se não, cria e retorna .T. ? oFtp:mkd( "meuftpwin" ), oFtp:cReply // vamos se posicionar na pasta meuftpwin... ? oFtp:cwd( "meuftpwin" ), oFtp:cReply // vamos subir os arquivos deste exemplo... ? ? oFtp:uploadFile( "meuftpwin.prg" ) , oFtp:cReply ? oFtp:uploadFile( "meuftpwin.exe" ) , oFtp:cReply // vamos provar que os arquivos subiram... ? aCp := oFtp:listFiles() // lista Conteudo da Pasta corrente For i = 1 To Len( aCp ) // Data, Hora, Tamanho, Nome ? aCp[i,1] next ? /* para apagar a pasta, vamos primeiro esvaziar a pasta ja temos o conteudo da pasta na variavel aCp criada acima ATENÇÃO: certifique-se de estar na pasta correta (aqui estamos) */ ? oFtp:pwd() // joga pasta corrente na cReply cPc := oFtp:cReply // pega pasta corrente // Nota: o retorno depende do seu servidor, ajuste no laço abaixo ? "Pasta Corrente: ", cPc // para saber como retorna, veja nesta linha ? /* CUIDADO!!! Muita atenção ao Usar/Alterar o Bloco abaixo, você pode apagar arquivos em pasta indesejada e ter problemas... */ If Upper( cPc ) == "MEUFTPWIN" // ajuste a pasta nesta linha For i = 1 To Len( aCp ) cFile := SubsT( aCp[i,1], Rat( Chr( 32 ), aCp[i,1] ) + 1 ) cMsg := "Apagar do Servidor o arquivo:;;" + cPc + "/" + cFile +"?" cOpc := Hb_Alert( cMsg, { "Nao", "Sim" } ) If cOpc = 2 ? oFtp:dele( cFile ), oFtp:cReply // se opcao 2, apaga o arquivo EndIf next EndIf ? If Empty( oFtp:list() ) // se pasta esta vazia... ? oFtp:cwd( "" ), oFtp:cReply // vamos para a Raiz cMsg := "Apagar do Servidor a Pasta:;;" + cPc cOpc := Hb_Alert( cMsg , { "Nao", "Sim" } ) // opciona apagar If cOpc = 2 ? oFtp:rmd( cPc ), oFtp:cReply // se opcao 2, apaga a pasta ? EndIf EndIf // antes de sair, selecione sempre a Raiz ? oFtp:cwd( "" ), oFtp:cReply // encerra conexÆo... oFtp:close() Return // Displays a progress bar during file upload/download Function FtpProgress( nSent, nTotal, oFtp ) LOCAL cProgress LOCAL nRow := Row(), nCol := Col() cProgress := Replicate( Chr(178), Int( MaxCol()*nSent/nTotal ) ) SetPos( MaxRow()-1, 0 ) ?? oFtp:oUrl:cFile // nome do arquivo que est  subindo ? PadR( cProgress, MaxCol() ) // barra de progresso SetPos( nRow, nCol ) RETURN .T.