Substituir a função __CopyFile de suas customizações | Ti Responde 0257

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.

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