curso básico de programação – aula 14 · curso bÁsico de programaÇÃo ... (do teclado) um...
Post on 14-Jan-2019
221 Views
Preview:
TRANSCRIPT
CURSO BÁSICO DE
PROGRAMAÇÃO –
AULA 17
Manipulação de arquivos binários.
Revisão – Abrindo arquivos de texto em C
• FILE *arquivo = fopen(<nome_do_arquivo>, <modo>);
• FILE: Tipo do objeto de arquivo.
• fopen: Função de abertura de arquivo.
• <nome_do_arquivo>: Endereço ou nome do arquivo.
• <modo>: Parâmetro que define de que forma o arquivo
desejado será aberto (a,r,rb+,etc...)
Revisão – Tipos de abertura de arquivo
Exemplos:
• Leitura:
• FILE *arquivo;
• arquivo = fopen(“C:/dados.txt”, “r”);
• Escrita:
• FILE * arquivo;
• arquivo = fopen(“C:/notas.txt”, “w”);
• Continuação (Concatenação):
• FILE * arquivo;
• arquivo = fopen(“C:/chamada.txt”, “a”);
Revisão – Tipos de abertura de arquivo
• Exemplos:
• Leitura e Escrita:
• FILE * arquivo;
• arquivo = fopen(“C:/arquivo.txt”, “r+”);
• Ou
• FILE * arquivo;
• meuFile = fopen(“C:/arquivo2.txt”, “w+”);
Revisão – Ler o conteúdo de um Arquivo
• Primeira forma:
fscanf(<variavel_de_arquivo>, "%s", <vetor_de_char>);
• Realiza a leitura até encontrar um espaço.
• <variavel_de_arquivo>: variável sobre a qual o arquivo foi aberto pela função “fopen”.
• <vetor_de_char>: vetor sobre o qual a palavra será armazenada.
Revisão – Ler o conteúdo de um Arquivo
• Segunda forma:
fgets(<vetor_de_char>, <tamanho>, <variavel_de_arquivo>);
• Lê uma quantidade especificada de caracteres.
• <variavel_de_arquivo>: variável sobre a qual o arquivo foi aberto pela função “fopen”.
• <vetor_de_char>: vetor sobre o qual a palavra será armazenada.
• <tamanho>: número de caracteres que desejamos ler do <variavel_de_arquivo>.
Escrevendo em um arquivo em C:
• Primeira forma:
fprintf(<variavel_de_arquivo>, <mensagem>);
• Lê uma palavra até que se encontra um espaço.
• <variavel_de_arquivo>: variável sobre a qual o arquivo foi aberto pela função “fopen”.
• <mensagem>: sequência de caracteres a qual o usuário deseja armazenar no arquivo.
Escrevendo em um arquivo em C:
• Segunda forma:
fputs(<mensagem>, <variavel_de_arquivo>);
• Lê uma palavra até que se encontra um espaço.
• <variavel_de_arquivo>: variável sobre a qual o arquivo foi aberto pela função “fopen”.
• <mensagem>: sequência de caracteres a qual o usuário deseja armazenar no arquivo.
Exemplo:
Revisão - Salvando um arquivo em C:
fclose(<variavel_de_arquivo>);
fclose: Função de fechamento de arquivo.
• Retorna 0 se o arquivo foi salvo corretamente;
• Libera a memória que foi utilizada para trabalhar com o
arquivo;
• Desbloqueia o arquivo para uso em outros programas.
Exemplo:
Exercícios de revisão:
• Faça um programa que leia um arquivo texto do disco,
lendo linha a linha, e exibindo cada uma das linhas
numeradas na tela. A idéia é podermos pegar um arquivo
texto qualquer (pode ser inclusive o arquivo do programa
fonte – arquivo “.c” – de um destes exercícios) e mostrar
na tela com as linhas numeradas.
Exercícios de revisão:
• Faça um programa que leia (do teclado) um cadastro de
10 alunos, indicando o nome, nota1, nota2. Calcule a
média aritmética simples dos 10 alunos e depois escreva
em um arquivo de texto os dados de cada aluno: nome,
nota1, nota2 e média. Lembre-se de que as notas e
média deverão ser apresentadas como valores que
possuem até 2 casas após a vírgula.
Arquivos Binários:
• Arquivo binário é um arquivo no qual armazena um
conjunto de bits, que podem representar qualquer tipo de
informação.
• Um arquivo binário pode armazenar números, caracteres
e outros dados, que ao serem lidos serão processados
pelo computador.
• Diferente dos arquivos de texto, não é possível abrir um
arquivo binário com um editor de texto qualquer e
entender seu conteúdo, pois toda a informação está
codificada de forma binária.
Arquivos Binários:
• Por exemplo, se tentar abrir um arquivo do formato *.exe
com um editor de texto, verá algo parecido com isto:
• É perceptível que não é possível um humano entender a
informação contida neste arquivo.
Arquivos Binários:
• A linguagem de programação C fornece funções para que
o programador trabalhe utilizando arquivos binários.
Algumas destas são:
• fwrite() - Escreve um dado em um arquivo;
• fread() - Le um dado de um arquivo;
• fseek() - Move a posição de leitura de um arquivo;
• ftell() - Informa a posição de leitura de um arquivo;
• rewind() – Retorna à posição de leitura de um arquivo para o inicio;
• feof() – Informa se o arquivo está em seu fim;
Abrindo um arquivo binário
• Abrir um arquivo binário em C muito semelhante ao abrir
um arquivo de texto, a única diferença é o segundo
parâmetro passado à função fopen().
• Estes parametros são:
• wb – abre ou cria um arquivo binário para escrita.
• rb – abre um arquivo para leitura.
• rb+ - abre um arquivo tanto para leitura como escrita.
• Ex:
• FILE *arquivo = fopen(“arquivo.ext”,”rb+”);
Escrevendo em um arquivo binário
• A função fwrite() se encarrega de escrever dados em um
arquivo binário, contudo, seu uso é um pouco diferente
da função fprintf().
• A sintaxe da função fwrite() é: • fwrite(&<var>,<tam>,<mult>,<arq_ptr>);
• Onde: • &<var> = o endereço da variável a ser escrita.
• <tam> = o tamanho em bytes do tipo da variavel, geralmente obtido com o
auxilio da função sizeof();
• <mult> = multiplica o valor de <tam>, usado para escrever vetores e
strings, para variáveis normais o valor será 1.
• <arq_ptr> = ponteiro para o arquivo aberto.
Exemplo de escrita em arquivo binário
Lendo um arquivo binário
• A função fread() realiza a leitura de um arquivo binário e
passa o valor lido para uma variável passada por
parâmetro à função.
• A sintaxe da função fread é: • fread(&<var>,<tam>,<mult>,<arq_ptr>);
• Onde: • &<var> = o endereço da variável que será passada o valor lido.
• <tam> = o tamanho em bytes do tipo da variavel, geralmente obtido com o
auxilio da função sizeof();
• <mult> = multiplica o valor de <tam>, usado para ler vetores e strings,
para variáveis normais o valor será 1.
• <arq_ptr> = ponteiro para o arquivo aberto.
Exemplo de leitura em arquivo binário
Escrevendo e lendo em pontos específicos de
um arquivo • Quando se lê um arquivo binário, pode-se querer ler uma parte especifica do
arquivo, dado que o programador já conheça a estrutura do arquivo e onde se encontra a posição da informação desejada.
• Para tal, usa-se a função fseek(), que irá posicionar o leitor do arquivo para a posição desejada.
• Sua sintaxe é:
• fseek(<arq_ptr>, <descolamento>,<referencia>);
• Onde:
• <arq_ptr> = ponteiro para o arquivo aberto;
• <deslocamento> = tamanho em bytes desejados para deslocar o leitor do arquivo, valores negativos voltam o leitor para posições anteriores;
• <referencia> :
• SEEK_SET = informa que o deslocamento se dará a partir da posição inicial do arquivo;
• SEEK_CUR = informa que o deslocamento se dará a partir da posição atual do arquivo;
• SEEK_END = informa que o deslocamento se dará a partir da posição final do arquivo;
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• Para entender a necessidade do uso da função
fseek(), e como o uso de uma função fwrite() ou
fread() pode afetar a obtenção de informações,
serão mostrados algumas imagens ilustrando
como funciona o posicionamento do leitor do
arquivo binário.
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• A imagem ao lado mostra um arquivo
aberto contendo varias informações.
• Ao abrir um arquivo, sua posição de
leitura se localiza logo em seu inicio,
como mostrado na imagem.
• Cada tipo de dado possui um
tamanho, por exemplo, um char
possui 1 byte, um int e um float
possuem 4 bytes, e uma estrutura
definida pelo usuário tem tamanho
variável.
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• Ao usar uma função fread() ou fwrite(), o leitor do arquivo
também ira se mover.
• Por exemplo, se usar a função desta forma:
• fread(&a,sizeof(int),1,arquivo)
• O leitor do arquivo estará assim:
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• Se mudar o parâmetro de multiplicação de 1 para 2:
• fread(&a,sizeof(int),2,arquivo)
• O leitor do arquivo estará assim:
Funcionamento do posicionamento de leitura e
escrita um arquivo binário • Usando a função fseek(), o programador pode mover o leitor do
arquivo sem escrever ou ler dado algum, isto é útil para não alterar o arquivo de forma equivocada.
• Por exemplo, se usar a função desta forma: fseek(arquivo, sizeof(int),SEEK_SET);
• O leitor do arquivo estará assim:
Funcionamento do posicionamento de leitura e
escrita um arquivo binário • Caso seja usada novamente a função, o leitor do arquivo estará
assim:
• Perceba que não houve mudança na posição do leitor do arquivo.
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• Isto se deve ao fato de que a <referencia> passada por
parâmetro à função referencia que o deslocamento deva
ser feito a partir no inicio do arquivo!
• Para que o leitor do arquivo se mova em relação a posição
atual do mesmo, a referencia de deslocamento deve ser
SEEK_CUR!
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• A função fseek() não possui multiplicador de descolamento,
mas ainda assim é possível multiplicar o deslocamento
usando uma simples multiplicação do tamanho. Ex:
• fseek(arquivo, sizeof(int) * 2, SEEK_SET)
• O leitor do arquivo estará assim:
Funcionamento do posicionamento de leitura e
escrita um arquivo binário
• Para retornar o leitor do arquivo para seu inicio, não
importa de onde o mesmo estiver, a função rewind() deverá
ser usada. Ex:
• rewind(arquivo);
• Para verificar se o leitor do arquivo está na parte final do
arquivo, poderá ser usada a função feof(), que significa “file
end of file”. Ex
• feof(arquivo);
• feof() retornara 0 se o leitor não estiver no fim do arquivo, e 1 se
estiver.
Exemplo do uso de fseek para ler e escrever dados
Escrita e leitura de estruturas
• É possível escrever uma estrutura criada pelo programador em um
arquivo binário de forma que não seja necessário escrever cada
atributo separadamente. O mesmo vale para a leitura de uma
estrutura.
• Para que isso seja feito, a função fwite() e fread() deverão ser
usadas desta forma:
• fread(&<var>,<tam_estrutura>,<mult>,<arq_ptr>);
• fwrite(&<var>,<tam_estrutura>,<mult>,<arq_ptr>);
• Onde: • &<var> = o endereço da variável do tipo da estrutura;
• <tam_estrutura> = o tamanho em bytes da estrutura, obtido por
sizeof(estrutura);
• <mult> = multiplica o valor de <tam_estrutura>, útil se quiser salvar um vetor
de estruturas, caso contrario o valor deve ser 1.
• <arq_ptr> = ponteiro para o arquivo aberto.
Exemplo da escrita de uma estrutura
Exercícios:
Faça uma função que leia os dados de uma estrutura, são
eles: nome, endereço, telefone, código do aluno. Logo em
seguida grave esses dados em um arquivo.dat.
Feito isso, você deverá fazer uma função para realizar a
busca do código do aluno e exibir os dados do mesmo na
tela, caso o código não exista mostre: “Aluno não
encontrado !”.
FIM Dúvidas?
Alexandre e Marcelo
naNe_abN@Hotmail.com, marcelofudo@outlook.com
top related