Copiar vários arquivos de uma pasta a outra | Ti Responde 011

No vídeo de hoje, iremos responder a dúvida de como copiar vários arquivos de uma pasta para outra em AdvPL.

Hoje, a dúvida foi feita pelo grande Abel, onde ele precisava percorrer todos os arquivos com uma extensão de uma pasta e copiar para outra.

Com isso em mente, fiz um vídeo explicando onde o primeiro passo seria buscar todos os arquivos com a função aDir (pode ser usado também a Directory), e depois um laço de repetição usando a função __CopyFile.

E abaixo o código fonte desenvolvido para exemplificar:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zVid11
Função de exemplo copiando vários arquivos de uma pasta local para o servidor
@type  Function
@author Atilio
@since 28/01/2022
/*/

User Function zVid11()
    Local aArea     := FWGetArea()
    Local cPastaLoc := "C:\spool\"
    Local cPastaDat := "\x_temp\"
    Local aArquivos := {}
    Local nAtual    := 0

    //Se a pasta não existir na Protheus Data, cria
    If ! ExistDir(cPastaDat)
        MakeDir(cPastaDat)
    EndIf

    //Busca todos os pdfs da pasta local
    aDir(cPastaLoc + "*.pdf", aArquivos)

    //Percorre todos os arquivos
    For nAtual := 1 To Len(aArquivos)
        __CopyFile(cPastaLoc + aArquivos[nAtual], cPastaDat + aArquivos[nAtual])
    Next

    FWRestArea(aArea)
Return

Bom pessoal, por hoje é só.
Abraços 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.

2 Responses

  1. Mestre, muito bom! Isso me deu uma idéia bem legal… rs
    Apenas um detalhe, acho que o aArquivos precisa ser passado por @referência, certo?
    Abraços!

    • Bom dia Brunão, tudo joia?

      Opa, obrigado pelo comentário.

      Então, no caso de arrays, quando passa ele inteiro como parâmetro numa função, tudo que essa função fazer vai atualizar ele (como se estivesse em referência), similar quando nós temos uma situação onde teríamos o seguinte:
      aArray1 := aArray2

      No cenário acima, tudo que for feito no aArray1 vai ser atualizado no aArray2, pois ele não esta criando um novo array, esta apenas pegando o mesmo endereço. Por isso o indicado é usar a aClone para fazer cópia de arrays.

      Agora voltando para o exemplo do aDir, caso queira ver uma explicação mais completa, segue um link do TDN, veja a partir do seguinte trecho “Entretanto, se um array é passado para uma rotina por valor e a rotina invocada alterar o valor de um dos seus elementos, esta mudança se refletirá no elemento original da matriz, tornando-se definitiva” – https://tdn.totvs.com/pages/releaseview.action?pageId=6064316

      Resumidamente, o uso de referência com @ para arrays inteiros, se torna opcional, caso a matriz inteira for ser atualizada. No exemplo da aDir no TDN, até é citado o @ na Sintaxe, mas no exemplo mesmo, não tem referência ao @ no corpo da função – https://tdn.totvs.com/display/tec/ADir

      Caso a TOTVS atualize alguma documentação, ou se você encontrar também alguma referência sobre, nós atualizamos aqui o artigo e o exemplo da função.

      Obs.: Vi aqui o site que você montou, parabéns pelo desenvolvimento, lhe estimo sucesso.

      Um grande abraço.

Deixe uma resposta

Terminal de Informação