22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}<br />

else<br />

printf("\n Registro ja cadastrado \n");<br />

fclose(p);<br />

}<br />

Excluindo um registro de um arquivo<br />

Outra operação muito utilizada <strong>em</strong> arquivos é a exclusão de um registro. No nosso ex<strong>em</strong>plo, esta<br />

operação seria necessária, por ex<strong>em</strong>plo, na ocasião de um pedido de d<strong>em</strong>issão de um funcionário. Uma<br />

possível solução é, após localizar o registro, gravar todos os outros registros num arquivo auxiliar, T<strong>em</strong>p,<br />

excluir do disco o arquivo original e renomear o arquivo T<strong>em</strong>p com o nome do arquivo original.<br />

A maioria dos compiladores C exclu<strong>em</strong> um arquivo através da função r<strong>em</strong>ove() que possui um<br />

parâmetro do tipo vetor de caracteres para receber o nome do arquivo a ser r<strong>em</strong>ovido. Para renomear um<br />

arquivo, os compiladores C possu<strong>em</strong> a função rename() que possui dois parâmetros do tipo vetor de<br />

caracteres, devendo o primeiro receber o nome atual do arquivo e o segundo receber o novo nome que se<br />

pretende.<br />

Dentro do ex<strong>em</strong>plo que estamos estudando, a função abaixo recebendo o valor do campo r.Mat e o<br />

nome do arquivo, exclui, se a matrícula dada for uma matrícula cadastrada, o registro correspondente.<br />

/*Função que exclui um registro de matrícula dada */<br />

void ExcluiRegistro(char s[4], char s1[12])<br />

{<br />

struct TRegistro r;<br />

char c;<br />

long Byte;<br />

int Tam, Reg;<br />

FILE *p, *t;<br />

Tam = sizeof(r);<br />

Byte = ConsultaRegistro(s, s1);<br />

if (Byte != -1)<br />

{<br />

p = fopen(s1, "rb");<br />

Byte = Byte – Tam;<br />

fsetpos(p, &Byte);<br />

fread(&r, Tam, 1, p);<br />

printf("Matricula: %s \b Nome: %s \n", r.Mat, r.Nome);<br />

printf("Exclui este registro (S/N)? ");<br />

fflush(stdin);<br />

scanf("%c", &c);<br />

if (toupper(c) == 'S')<br />

{<br />

t = fopen("T<strong>em</strong>p", "wb");<br />

rewind(p); /*Primeiro registro do arquivo*/<br />

Reg = 0;<br />

fread(&r, Tam, 1, p);<br />

while (!feof(p))<br />

{<br />

if (Reg != Byte)<br />

fwrite(&r, Tam, 1, t);<br />

Reg = Reg + Tam;<br />

fread(&r, Tam, 1, p);<br />

}<br />

fclose(p);<br />

fclose(t);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!