Apagar arquivo de um servidor FTP via AdvPL

No artigo de hoje, vamos ver em como apagar arquivos de servidores externos usando FTP via AdvPL.

Recentemente me perguntaram, se via AdvPL era possível excluir arquivos em um servidor usando FTP.

 

Pensando nisso montamos esse exemplo, onde a lógica consiste em:

  1. Dar um SplitPath no arquivo para pegar o caminho e o filename separados
  2. Utilizar FtpConnect para se conectar no servidor
  3. Usar a função Separa para quebrar o caminho das pastas em um array
  4. Fazer um for nas pastas e ir modificando a pasta posicionada no FTP através da FTPDirChange
  5. Se tudo der certo, ai acionar a FTPErase
  6. E depois desconectar com a FTPDisconnect

              

Abaixo segue o fonte com essa lógica:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} zDelFTP
Função para apagar o arquivo dentro do FTP
@type user function
@author Atilio
@since 20/06/2025
@version version
@param cArquiFTP, Caractere, Caminho do arquivo no FTP
@example
    u_zDelFTP("\2025-02\nf_entradas\mp\arquivo.txt")
/*/

User Function zDelFTP(cArquiFTP)
    Local aArea       := FWGetArea()
    Local lContinua   := .T.
    Local cFTPUrl     := "ftp.milenioapp.com"
    Local cFTPUser    := "protheus@milenioapp.com"
    Local cFTPPass    := Decode64("bTc5KnVxeG1NNC1V")
    Local nFTPPort    := 21
    Local cDrive      := ""
    Local cDiretorio  := ""
    Local cNome       := ""
    Local cExtensao   := ""
    Local aPastas     := {}
    Local nAtual      := 0
    Default cArquiFTP := ""

    //Somente se veio arquivo no FTP
    If ! Empty(cArquiFTP)
        //Quebra o arquivo em partes
        SplitPath(cArquiFTP, @cDrive, @cDiretorio, @cNome, @cExtensao)

        //Realiza a conexão
        lContinua := FTPConnect(cFTPUrl, nFTPPort, cFTPUser, cFTPPass)

        //Se tiver tudo ok
        If lContinua
            //Pega as pastas
            aPastas := Separa(cDiretorio, "\")

            //Vai navegando nas pastas
            For nAtual := 1 To Len(aPastas)
                If ! Empty(aPastas[nAtual])
                    lContinua := lContinua .And. FTPDirChange(aPastas[nAtual])

                    //Se deu falha em algum, encerra o processo
                    If ! lContinua
                        Exit
                    EndIf
                EndIf
            Next

            //Aciona a exclusão do arquivo dentro da pasta
            If lContinua
                FTPErase(cNome + cExtensao)
            EndIf
        EndIf

        //Desconecta o FTP
        FTPDisconnect()
    EndIf

    FWRestArea(aArea)
Return

Obs.: Para servidores Linux, apenas se atente, pois as pastas e arquivos, você precisará passar corretamente caracteres maiúsculos e minúsculos.

 

Bom pessoal, por hoje é só.

 

Um grande abraço a todos e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação