No vídeo de hoje, vamos demonstrar em como resolver o warning de se utilizar a __CopyFile a partir das versões recentes do Protheus.
Após algumas atualizações ao compilar alguma função que acione a __CopyFile, é apresentado uma mensagem de warning.
Pensando nisso, montamos um exemplo, onde vamos demonstrar em como substituir seja usando uma função customizada (zCopyFile) ou usando outra função padrão (sem precisar usar a CpyS2T e a CpyT2S).
Segue abaixo o vídeo exemplificando:
Abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "tlpp-core.th"
#Include "TOTVS.ch"
//Declaração da namespace
Namespace custom.terminal.youtube
/*/{Protheus.doc} User Function video0257
Exemplo de como copiar arquivos usando a zCopyFile no lugar da __CopyFile
@type Function
@author Atilio
@since 08/08/2026
@example custom.terminal.youtube.u_video0257()
/*/
User Function video0257()
Local aArea := FWGetArea() As Array
Local cOrigFile := "C:\spool\arquivo.txt" As Character
Local cDestFile := "C:\spool\arquivo_copia.txt" As Character
Local cDestFile2 := "C:\spool\arquivo_copia_2.txt" As Character
//Se a cópia for bem sucedida (usando função customizada)
If u_zCopyFile(cOrigFile, cDestFile)
FWAlertSuccess("Cópia do arquivo realizada com sucesso!", "Sucesso")
Else
FWAlertError("Falha ao copiar o arquivo, verifique o privilégio ou se existe a pasta destino!", "Falha")
EndIf
//Se a cópia for bem sucedida (usando função padrão)
If SmCopy(cOrigFile, cDestFile2)
FWAlertSuccess("Cópia do arquivo realizada com sucesso!", "Sucesso 2")
Else
FWAlertError("Falha ao copiar o arquivo, verifique o privilégio ou se existe a pasta destino!", "Falha 2")
EndIf
FWRestArea(aArea)
Return
E abaixo o código da zCopyFile:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zCopyFile
Copia arquivo entre dois lugares, podendo ser estação <-> estação, estação <-> servidor, servidor <-> estação e servidor <-> servidor
@author Atilio
@since 12/05/2026
@version 1.0
@type function
/*/
User Function zCopyFile(cArqOrigem, cArqDestino)
Local aArea := FWGetArea()
Local cConteuOrige := ""
Default cArqOrigem := ""
Default cArqDestino := ""
//Somente se a origem existir
If File(cArqOrigem)
//Se o destino já existir, apaga ele antes de copiar
If File(cArqDestino)
FErase(cArqDestino)
EndIf
//Lê o conteúdo da origem
cConteuOrige := fLerArquivo(cArqOrigem)
//Grava o conteúdo no destino
MemoWrite(cArqDestino, cConteuOrige)
//Se o arquivo existir no destino, deu certo a cópia
If File(cArqDestino)
lCopiou := .T.
EndIf
EndIf
FWRestArea(aArea)
Return lCopiou
Static Function fLerArquivo(cArquivo)
Local cConteudo := ""
Local oArquivo
//Tenta abrir o arquivo e pegar o conteudo
oArquivo := FwFileReader():New(cArquivo)
If oArquivo:Open()
//Se deu certo abrir o arquivo, pega o conteúdo dele
cConteudo := oArquivo:FullRead()
EndIf
oArquivo:Close()
Return cConteudo
Bom pessoal, por hoje é só.
Abraços e até a próxima.