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