Função: FWrite
Escreve dados de um buffer de string em um arquivo binário. Para isso, pode-se escrever todo ou parte do conteúdo do buffer, limitando a quantidade de bytes.
FWrite ( < nHandle>, < cBuffer>, [ nQtdBytes] ) --> nRet
Nome | Tipo | Descrição | Obrigatório | Referência |
nHandle | Numérico | Indica o manipulador de arquivo obtido através das funções FCreate() e FOpen(). | X | |
cBuffer | Caracter | Indica a string que será escrita no arquivo especificado. O tamanho desta variável deve ser maior ou igual ao tamanho informado no parâmetro (caso seja informado o tamanho). | X | |
nQtdBytes | Numérico | Indica a quantidade de bytes que serão escritos a partir da posição atual do ponteiro de arquivos. Caso não seja informado, todo o conteúdo do parâmetro é escrito. |
nRet
- (numerico)
- Retorna a quantidade de bytes escritos na forma de um valor numérico inteiro. Caso o valor seja igual ao parâmetro <nQtdBytes>, a operação foi realizada com sucesso; caso contrário, se o valor for menor ou zero, o disco rígido está cheio ou ocorreu erro.
- A escrita começa a partir da posição atual do ponteiro de arquivos e a função retorna a quantidade real de bytes escritos.
- Através das funções FOpen() e FCreate(), pode-se abrir ou criar um arquivo, abrir uma porta de comunicação para gravar ou enviar os dados do buffer informado.
- Essa função suporta na string, do parâmetro , todos os caracteres da tabela ASCII, inclusive caracteres de controle (ASC 0, ASC 12, ASC 128, etc.).
- A gravação no arquivo é realizada a partir da posição atual do ponteiro, mas pode ser ajustado através das funções FSeek(), FRead() ou FReadStr().
- Se o retorno da função for menor que o parâmetro ou zero, o disco rígido está cheio ou ocorreu erro. Neste caso, utilize a função FError() para obter mais detalhes.
//Exemplo 1#include "fileio.ch"...// Abre o arquivonHandle := fopen('c:\garbage\teste.txt' , FO_READWRITE + FO_SHARED )If nHandle == -1 MsgStop('Erro de abertura : FERROR '+str(ferror(),4))Else FSeek(nHandle, 0, FS_END) // Posiciona no fim do arquivo FWrite(nHandle, "Nova Linha", 10) // Insere texto no arquivo fclose(nHandle) // Fecha arquivo MsgAlert('Processo concluído')Endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Exemplo 2//Este exemplo realiza uma cópia de um arquivo Texto chamado ORIGEM.TXT, para um arquivo chamado DESTINO.TXT, no ambiente do Servidor de Aplicação.#INCLUDE "FILEIO.CH"#DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos / gravados por vezUser Function TestCopy()Local cBuffer := SPACE(F_BLOCK)Local nHOrigem , nHDestino Local nBytesLidos , nBytesFalta , nTamArquivoLocal nBytesLer , nBytesSalvoLocal lCopiaOk := .T. // Abre o arquivo de OrigemnHOrigem := FOPEN("ORIGEM.TXT", FO_READ)// Testa a abertura do ArquivoIf nHOrigem == -1 MsgStop('Erro ao abrir origem. Ferror = '+str(ferror(),4),'Erro') Return .F. Endif// Determina o tamanho do arquivo de origemnTamArquivo := Fseek(nHOrigem,0,2)// Move o ponteiro do arquivo de origem para o inicio do arquivoFseek(nHOrigem,0)// Cria o arquivo de destinonHDestino := FCREATE("DESTINO.TXT", FC_NORMAL)// Testa a criação do arquivo de destinoIf nHDestino == -1 MsgStop('Erro ao criar destino. Ferror = '+str(ferror(),4),'Erro') FCLOSE(nHOrigem) // Fecha o arquivo de Origem Return .F. Endif// Define que a quantidade que falta copiar é o próprio tamanho do ArquivonBytesFalta := nTamArquivo// Enquanto houver dados a serem copiadosWhile nBytesFalta > 0 // Determina quantidade de dados a serem lidos nBytesLer := Min(nBytesFalta , F_BLOCK ) // lê os dados do Arquivo nBytesLidos := FREAD(nHOrigem, @cBuffer, nBytesLer ) // Determina se não houve falha na leitura If nBytesLidos < nBytesLer MsgStop( "Erro de Leitura da Origem. "+; Str(nBytesLer,8,2)+" bytes a LER."+; Str(nBytesLidos,8,2)+" bytes Lidos."+; "Ferror = "+str(ferror(),4),'Erro') lCopiaOk := .F. Exit Endif // Salva os dados lidos no arquivo de destino nBytesSalvo := FWRITE(nHDestino, cBuffer,nBytesLer) // Determina se não houve falha na gravação If nBytesSalvo < nBytesLer MsgStop("Erro de gravação do Destino. "+; Str(nBytesLer,8,2)+" bytes a SALVAR."+; Str(nBytesSalvo,8,2)+" bytes gravados."+; "Ferror = "+str(ferror(),4),'Erro') lCopiaOk := .F. EXIT Endif // Elimina do Total do Arquivo a quantidade de bytes copiados nBytesFalta -= nBytesLerEnddo// Fecha os arquivos de origem e destinoFCLOSE(nHOrigem)FCLOSE(nHDestino)If lCopiaOk MsgStop('Cópia de Arquivos finalizada com sucesso. '+; str(nTamArquivo,12,0)+' bytes copiados.','Final')Else MsgStop( 'Falha na Cópia. Arquivo de Destino incompleto. '+; 'Do total de '+str(nTamArquivo,12,0)+' bytes, faltaram '+str(nBytesFalta,12,0)+' bytes.','Final')EndifReturn
Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas