Nesse vídeo demonstraremos a utilização da classe FWFileWriter, que serve para criar um arquivo e inserir conteúdos nele.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe218 Exemplo de função que realiza gravações em um arquivo @type Function @author Atilio @since 20/02/2023 @see https://tdn.totvs.com/display/public/framework/FWFileWriter @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe218() Local aArea := FWGetArea() Local cArquivo := "C:\spool\curso\log_produtos.txt" Local oFWriter := Nil Local cLinha := "" //Se o arquivo existir, irá apagar If File(cArquivo) FErase(cArquivo) EndIf //Cria o arquivo de logs oFWriter := FWFileWriter():New(cArquivo, .T.) //Se não foi possível criar o arquivo, encerra o Protheus If ! oFWriter:Create() Final("Houve um erro ao criar o arquivo - " + oFWriter:Error():Message) Else //Inicia o texto com um log genérico oFWriter:Write("Código do Usuário: " + RetCodUsr() + CRLF) oFWriter:Write("Nome do Usuário: " + UsrRetName(RetCodUsr()) + CRLF) oFWriter:Write("Função (FunName): " + FunName() + CRLF) oFWriter:Write("Ambiente: " + GetEnvServer() + CRLF) oFWriter:Write(CRLF) oFWriter:Write("Log iniciado, data [" + dToC(Date()) + "] e hora [" + Time() + "]" + CRLF) oFWriter:Write("--" + CRLF) oFWriter:Write(CRLF) //Abre a tabela de produtos e posiciona no topo DbSelectArea("SB1") SB1->(DbSetOrder(1)) SB1->(DbGoTop()) //Enquanto houver produtos While ! SB1->(EoF()) //Monta o texto da linha cLinha := "[" + Time() + "] " cLinha += " Prod: " + SB1->B1_COD + ";" cLinha += " Tipo: " + SB1->B1_TIPO + ";" cLinha += " Desc: " + SB1->B1_DESC + ";" //Insere no arquivo oFWriter:Write(cLinha + CRLF) SB1->(DbSkip()) EndDo //Mostra um texto no fim do arquivo oFWriter:Write(CRLF) oFWriter:Write("--" + CRLF) oFWriter:Write("Log encerrado, data [" + dToC(Date()) + "] e hora [" + Time() + "]") //Encerra o arquivo oFWriter:Close() //Se não for via job/webservice, abre o arquivo If ! IsBlind() ShellExecute("OPEN", cArquivo, "", "C:\spool\curso\", 1) EndIf EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Muito obrigado por compartilhar seu conhecimento. Testei aqui e deu certo no meu projeto.
Bom dia Jose, tudo joia?
Nós que agradecemos pelo comentário.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.
Uma duvida. Vi que voce testou se o arquivo não foi criado e ai ele cai fora ou continua. Mas supondo que na minha rotina eu precisasse fechar o arquivo em um determinado momento, existe um jeito de reabri-lo, testando se ele existe, e ai abri-lo novamente para uma nova gravação ao final do mesmo arquivo?
Bom dia Mauricio, tudo joia?
Eu nunca precisei fazer, não sei se tem algum recurso nativo.
Mas uma ideia seria:
a. Você pode antes de acionar a FWFileWriter, testar se o arquivo existe
b. Se existir, ai você pode usar a FWFileReader, e dar um FullRead e jogar numa variável
c. Depois você pega e aciona a FWFileWriter para criar o arquivo, e joga o conteúdo dessa variável do passo b
d. Ai tente incrementar depois no fim do arquivo
Tenha um ótimo e abençoado fim de semana.
Um forte abraço.
Obrigado pela idéia…também não achei função especifica pra reabrir o arquivo.
Bom dia Mauricio, tudo joia?
Entendi. Se eu conseguir um tempo, vou tentar pesquisar também.
Ai se encontrar, eu monto um conteúdo sobre o assunto.
Tenha uma ótima e abençoada segunda feira.
Um forte abraço.