Buscar

aula10 APRESENTAÇÃO EM PPT

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Disciplina: Linguagem de Programação I
Aula 10: Arquivos – armazenando para preservar (2ª Parte)
Introdução
Escolher usar arquivo binário é uma decisão do programador, mas há momentos que
deixa de ser escolha pelas necessidades impostas pela aplicação.
Na Aula 9, tivemos a oportunidade de construir arquivos externos, usando o bloco de
notas, mas, no modo binário, isso não é possível, pois não existe o conceito de linha,
uma vez que o arquivo binário é uma sequência de bytes que não têm significado se
tentarmos ler o arquivo.
Nesta aula, conheceremos muitas funções que lhe darão subsídios para explorar ao
máximo as vantagens que temos ao usar arquivo binário. Mantivemos a linha de
apresentar soluções padrão ANSI, evitando, quando possível, o uso de funções que
não estão disponíveis em alguns compiladores.
Além das funções de abertura e fechamento já estudadas, vamos aprender outras
que irão permitir obter a posição dentro do arquivo de um elemento/estrutura ou
posicionar em um local especifico dentro do arquivo, possibilitando acesso direto.
Objetivos
Reconhecer as vantagens do arquivo binário;
Reconhecer e usar as funções rewind(), fread(), fwrite(), fgetpos(), fsetpos(),
fseek(), ftell(), rename(), remove(), rewind();
Construir trechos de gravação leitura, consulta, alteração e exclusão em
arquivos no modo binário.
Funções de leitura e gravação
�
Função: fread ()
Essa função lê um elemento (variável simples, struct ou matriz) do arquivo
externo e armazena na MP, cujo endereço está indicado no primeiro
parâmetro.
Protótipo
int fread (void * ptr, size_t tamanho, size_t nmemb, FILE* ptrArq);
Sintaxe
fread (enderecoElemento, tamanho, quantidade, ptrArq);

Exemplo
Para mais esclarecimentos quanto aos argumentos tamanho e
quantidade, veja um exemplo.
<galeria/aula10/anexo/a10_doc01.pdf>
�
Função: fwrite ()
file:///W:/2018.2/linguagem_de_programacao_i__conv010/galeria/aula10/anexo/a10_doc01.pdf
Essa função copia um elemento cujo endereço está indicado no primeiro
parâmetro (variável simples, struct ou matriz) da MP e grava no arquivo
externo, avançando o indicador de fluxo tantos bytes quantos forem os
especificados na função.
Protótipo
int fwrite (void * ptr, size_t tamanho, size_t nmemb, FILE* ptrArq);
Sintaxe
int fwrite (enderecoElemento, tamanho, quantidade, ptrArq);

Exemplo
Vários exemplos dessa função apresentam trechos muito grandes e, por
essa razão, disponibilizaremos cada trecho em um programa para
facilitar o entendimento.
Apresentamos também programas que funcionam através de menu. Veja
os exemplos. <galeria/aula10/anexo/a10_doc02.pdf>
Veja o significado de cada parâmetro da função:
enderecoElemento
É um ponteiro para qualquer tipo que localiza a posição na MP onde deverá
ser armazenado o elemento que foi lido do arquivo externo. Em outras
palavras, o nome do elemento que, dependendo do tipo, tem & precedendo o
nome para se tornar um endereço.
Tamanho
Número de bytes do que vai ser lido, fornecido pela função sizeof
(argumento), sendo o argumento o tipo do elemento, ou o nome do elemento. 
 
file:///W:/2018.2/linguagem_de_programacao_i__conv010/galeria/aula10/anexo/a10_doc02.pdf
Quantidade
Indica o total de itens lidos, onde cada item possui seu tamanho especificado
no parâmetro tamanho.
ptrArq
Variável ponteiro de arquivo que aponta para o arquivo externo. 
 
Lembre-se que duas pequenas alterações deverão ser
realizadas para “rodar” nossos programas no Linux:
Trocar system(“cls”); por system(“clear”);
Retirar: system(“pause”);
Funções de localização e
posicionamento
�
Função: ftell ()
Essa função tem como finalidade retornar a posição corrente no fluxo
expressa sob o número de bytes a partir do início para arquivo binário, sendo
do tipo long int.
Lembrando que a primeira posição é 0 e, por essa razão, tem a coincidência
entre número de bytes e a posição para arquivo binário. Geralmente é usada
para arquivo de modo binário, mas nada impede de usá-la em arquivo no
modo texto.
Para arquivo texto, retorna a posição do início de uma linha, mas assumindo
que \n pode ser considerado como dois caracteres, não podemos confundir o
número que aparece com o tamanho do arquivo. Sendo assim, uma das
aplicações para esse tipo de arquivo seria retornar a uma posição desde que
fosse armazenado o retorno da função em uma variável.
Protótipo
long int ftell (FILE * ptrArq);
Sintaxe
ftell (variavelPonteiroArquivo);
Como toda função que tem retorno, a ftell deverá ser usada como argumento
de outra função ou ter seu valor armazenado em uma variável para que possa
ser usado em outro momento.
O retorno dessa função poderá ser a posição atual do ponteiro de
leitura/gravação ou -1L em caso de erro. Lembre-se que esse retorno é do
tipo long int.

Exemplo
Antes de dar continuidade a seus estudos, veja um exemplo
<galeria/aula10/anexo/a10_doc03.pdf> para entender melhor o
conteúdo.
file:///W:/2018.2/linguagem_de_programacao_i__conv010/galeria/aula10/anexo/a10_doc03.pdf

Função: fseek ()
Essa função desloca o indicador de posição de arquivo, apontado por stream,
para uma posição que é obtida pelo acréscimo, ou decréscimo, de bytes cujo
valor se encontra em offset, à posição indicada por whence.
Protótipo
int fseek (FILE *ptrArq, long offset, int whence);
Sintaxe
fseek (variavelPonteiroArquivo, deslocamento, origem);
seek_set
seek_cur
seek_end
Vamos entender cada parâmetro:
Variável ponteiro de arquivo
Identifica o fluxo, isto é, o nome da variável ponteiro do tipo file.
Deslocamento
Para arquivo do tipo binário, o número de bytes que deverá ser
deslocado a partir da origem. Caso esse valor seja negativo, retrocede,
indo em direção ao início, mas, se positivo, avança em direção ao fim do
arquivo.
Para arquivos do tipo texto, esse parâmetro é 0L (constante do tipo long)
ou o retorno da função, ftell() podendo ser combinado com uma
operação para chegar em uma determinada linha, sendo necessário um
cuidado especial, visto que o número de caracteres de cada linha é
variável.
Origem
Posição de referência para o deslocamento.
Só três valores poderão ser usados. São as constantes abaixo:
Constante Valor Posição
SEEK_SET 0 Início
SEEK_CUR 1 Atual
SEEK_END 2 Fim
Como a função é do tipo int, significa que tem retorno. Se a ação for bem
sucedida, retorna 0 caso contrário, retorna –1. 
Simplificando, o objetivo é fazer um reposicionamento do indicador de
fluxo.

Função: rewind ()
Essa função seta o indicador de posição do arquivo no início.
Protótipo
Void rewind(FILE *ptrArq);
Sintaxe
rewind (variavelPonteiroArquivo);
É uma função sem retorno (tipo void).
Ela é equivalente à função fseek(), com deslocamento 0 e posição de
referência SEEK_SET, além de limpar o indicador de erro do fluxo.
rewind (variavelPonteiroArquivo);
�
fseek(variavelPonteiroArquivo, 0, SEEK_SET);

Exemplo
Veja dois exemplos <galeria/aula10/anexo/a10_doc04.pdf> para
entender melhor o conteúdo.
Funções fgetpos e fsetpos
As funções que estudaremos agora são equivalentes às funções fseek() e
ftell() vistas anteriormente.
file:///W:/2018.2/linguagem_de_programacao_i__conv010/galeria/aula10/anexo/a10_doc04.pdf

As funções fgetpos e fsetpos são interfaces alternativas
equivalentes a ftell e fseek (com whence setado
para SEEK_SET), configurando e armazenando o valor
corrente do offset do arquivo do objeto referenciado
por pos. Em alguns sistemas não UNIX, um
objeto fpos_t pode ser um objeto complexo e estas
rotinas podem ser a única maneira portável de
reposicionar um fluxo de texto.
Manual do Programador Linux

Saiba mais
Veja dois Manual do Programador Linux
<http://renesp.com.br/man/man3/fseek.3.html> .
Para que possamos usar essas funções, precisamos conhecer um tipo pré-
definido:
fpos_t
http://renesp.com.br/man/man3/fseek.3.html
É um tipo pré-definido da biblioteca stdio.h que declara objeto armazenando
informações, que possibilitam especificar uma posição qualquer dentro de um
arquivo. Essas informações são recebidas da função fgetpos()e usadas pela
função fsetpos().

Função: fgetpos()
Obtém a posição atual no fluxo, armazenando-a no objeto apontado por pos.
Protótipo
int fgetpos(FILE *ptrArq, fpos_t *pos);
Sintaxe
fgetpos (variavelPonteiroArquivo, &pos);
O retorno dessa função é 0 se bem sucedida e a, se não for. Tanto essa função
como a função ftell() obtém a posição corrente. Logo, são equivalentes.
fgetpos (variavelPonteiroArquivo, &pos);
�
pos = ftell (variavelPonteiroArquivo);
�
Função: fsetpos()
Ajusta o indicador de posição de arquivo para o lugar sinalizado na variável
pos e cujo valor pode ter sido recebido através da função fgetpos() ou da
função ftell().
Protótipo
int fsetpos(FILE *ptrArq, fpos_t *pos);
Sintaxe
fsetpos (variavelPonteiroArquivo, &pos);
A função fsetpos retorna 0 se bem sucedida e –1, se não for.
Observe a equivalência entre as funções:
fsetpos (variavelPonteiroArquivo, &pos);
�
fseek (variavelPonteiroArquivo, pos, SEEK_SET);

Atenção
Na função fseek(), pos recebe, normalmente, o retorno da função ftell()
e, é uma variável do tipo long int. Na função fsetpos(), pos recebe de
fgetpos(). Isso não é rígido.
Outras funções

Função: remove()
Essa função apaga o arquivo especificado.
Protótipo
int remove(const char *nomeArquivo);
Sintaxe
remove (nomeArquivo); /*Entre aspas se for constante*/
Como é uma função do tipo int, tem retorno, sendo 0 se a remoção for bem
sucedida e diferente de 0, se não for.
O nome do arquivo é um vetor de char e se for
uma constante, precisa estar entre aspas.

Função: rename()
Essa função renomeia um arquivo.
Protótipo
int rename(const char *nomeAtual, const char *novoNome);
Sintaxe
rename (nomeAtual, novoNome); /*Entre aspas se for constante*/
Como é uma função do tipo int, tem retorno, sendo 0 se a ação de renomear
for bem sucedida e diferente de 0, se não for.
O nome do arquivo é um vetor de char e se for
uma constante, precisa estar entre aspas.
Questionamentos comuns de um
desenvolvedor
Um desenvolvedor quando olha para um programa finalizado que começou a
fazer há uma semana, ou duas, ou meses se questiona:
São tantos os porquês que seria melhor começar do zero do que alterar o que
está funcionando. Mas, resolvemos não fazer nenhuma alteração, pois como o
“olhar” vai mudando e se tornando mais crítico, nunca conseguiremos chegar
ao ideal.
Finalizando
Esperamos que seu convívio com as disciplinas de Lógica de Programação e
de Linguagem de Programação I tenha sido prazeroso e com perspectivas de
aplicação no seu dia a dia.
Deixamos de presente, um arquivo Tradutor, muito primitivo ainda, visto que
precisa receber outros trechos para começar a ficar bom. Contamos com você.

Saiba mais
Faça o download do Programa Tradutor
<galeria/aula10/anexo/a10_doc05.pdf> .
Referências
Próximos Passos
Explore mais
Pesquise na internet sites, vídeos e artigos relacionados ao conteúdo visto.
file:///W:/2018.2/linguagem_de_programacao_i__conv010/galeria/aula10/anexo/a10_doc05.pdf
Se ainda tiver alguma dúvida, fale com seu professor online, utilizando os recursos
disponíveis no ambiente de aprendizagem.

Continue navegando