Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
egistro zero do arquivo; a segunda, o registro apontado pelo ponteiro de leitura e gravação (registro<br />
corrente); a terceira, o final do arquivo. No caso da posição do registro ser obtida por fgetpos() ou por ftell(),<br />
o valor que deve ser passado para orig é SEEK_SET.<br />
Desta forma, para se escrever a função AlteraRegistro() escrita acima utilizando-se a função fseek()<br />
basta substituir os comandos fsetpos(p, &Byte) pelo comando fseek(p, Byte, SEEK_SET).<br />
A constante SEEK_END, a função fseek() e a função ftell() permit<strong>em</strong> determinar o tamanho, <strong>em</strong> bytes,<br />
de um arquivo. Basta posicionar o ponteiro de leitura e gravação no final do arquivo através de fseek(p, 0,<br />
SEEK_END) e obter a posição do ponteiro através de ftell(p).<br />
int TamanhoArquivo(char *s)<br />
{<br />
FILE *p;<br />
int Tamanho;<br />
p = fopen(s, "rt");<br />
fseek(p, 0, SEEK_END);<br />
Tamanho = ftell(p);<br />
fclose(p);<br />
return(Tamanho);<br />
}<br />
Com esta função é possível se determinar o número de registros de um arquivo. Basta dividir o<br />
tamanho do arquivo pelo tamanho de cada registro:<br />
int NumRegistros(char *s)<br />
{<br />
FILE *p;<br />
struct TRegistro r;<br />
p = fopen(s, "rt");<br />
return(TamanhoArquivo(s)/sizeof(r));<br />
fclose(p);<br />
}<br />
Vale observar que, da mesma forma que a chamada de fseek(p, 0, SEEK_END) posiciona o ponteiro<br />
de leitura e gravação no final do arquivo, fseek(p, 0, SEEK_SET) posiciona o tal ponteiro no início do<br />
arquivo (existe outra forma de apontar o ponteiro de leitura e gravação para o início do arquivo: rewind(p)).<br />
Incluindo novos registros num arquivo<br />
A inclusão de novos registros <strong>em</strong> um arquivo é feita de forma bastante simples, pois a função fopen()<br />
ativada no modo "ab+" abre um arquivo e permite que novos registros sejam nele gravados. Naturalmente, a<br />
inclusão de um novo registro deve ser precedida da verificação de que o tal registro já está armazenado no<br />
arquivo, o que impediria uma nova inclusão. T<strong>em</strong>os a seguinte sugestão para atingir o objetivo aqui<br />
proposto:<br />
/* Função que inclui um novo registro num arquivo */<br />
void IncluiRegistro(struct TRegistro r, char s[12])<br />
{<br />
char c;<br />
long Byte;<br />
int Tam;<br />
FILE *p;<br />
Tam = sizeof(r);<br />
Byte = ConsultaRegistro(r.Mat, s);<br />
if (Byte == -1)<br />
{<br />
p = fopen(s, "ab+");<br />
fwrite(&r, Tam, 1, p);