Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
...
...
Pagetitle | |||
---|---|---|---|
|
|
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
Bloco de código | ||
---|---|---|
| ||
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
...
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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
|
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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') |
...
...