Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

Versão 1 Próxima »

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

NomeTipoDescriçãoObrigatórioReferência
nHandleNuméricoIndica o manipulador de arquivo obtido através das funções FCreate() e FOpen(). X
cBufferCaracterIndica 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
nQtdBytesNuméricoIndica 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

  • Sem rótulos