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.
}<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);