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.
Sintaxe
FWrite( < nHandle >, < cBuffer >, [ nQtdBytes ] )
Parâmetros
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 | caractere | 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. |
|
|
Retorno
Nome | Tipo | Descrição |
---|---|---|
nRet | numérico | 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. |
Observações
- 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.
Exemplos
//Exemplo 1 #include "fileio.ch" User Function exemplo1() // Abre o arquivo nHandle := 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 Return
//Exemplo 2 #INCLUDE "FILEIO.CH" //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. #DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos / gravados por vez User Function TestCopy() Local cBuffer := SPACE(F_BLOCK) Local nHOrigem, nHDestino Local nBytesLidos, nBytesFalta, nTamArquivo Local nBytesLer, nBytesSalvoLocal lCopiaOk := .T. // Abre o arquivo de Origem nHOrigem := FOPEN("ORIGEM.TXT", FO_READ) // Testa a abertura do Arquivo If nHOrigem == -1 MsgStop('Erro ao abrir origem. Ferror = '+str(ferror(),4),'Erro') Return .F. Endif // Determina o tamanho do arquivo de origem nTamArquivo := Fseek(nHOrigem,0,2) // Move o ponteiro do arquivo de origem para o inicio do arquivo Fseek(nHOrigem,0) // Cria o arquivo de destino nHDestino := FCREATE("DESTINO.TXT", FC_NORMAL) // Testa a criação do arquivo de destino If 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 Arquivo nBytesFalta := nTamArquivo // Enquanto houver dados a serem copiados While 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 -= nBytesLer Enddo // Fecha os arquivos de origem e destino FCLOSE(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') Endif Return