Post on 07-Apr-2016
Programação II
Arquivos
Autoria: Ernani SantosModificação: Clebson Oliveira
Adaptação: Claudia Boeres
• Programas executando lidam com variáveis– forma abstrata pela qual os programadores enxergam
os dados que seus programas manipulam. – internamente, variáveis ocupam células de memória.
• usualmente o tipo inteiro de C corresponde a 32 bits• uma variável int em C ocupa 4 bytes (4 células de
memória).
• A memória principal de um computador (RAM) é o local onde os programas em execução, e as variáveis que eles utilizam, são armazenados.
2
Variáveis transientes e persistentes
• Essas variáveis armazenadas na memória principal – são chamadas de variáveis transientes – seu tempo de existência é limitado pelo tempo que o
programa se encontra em memória. • Quando o usuário ou o SO decidirem finalizá-lo,
essas variáveis deixarão de existir.• Computadores teriam sua utilidade muito reduzida
se os dados só pudessem ser armazenados enquanto os programas estivessem na memoria principal (e a maquina, ligada).
3
Variáveis transientes e persistentes
• Variáveis persistentes– conteúdo armazenado, e possível de ser acessado,
independentemente do programa que as criou estar na memória principal.
– variáveis persistentes são armazenadas em algum dispositivo de memória chamada de secundária:• como discos rígidos, CD/DVD, memória flash• mantém por um longo tempo os dados neles contidos • independe do conteúdo da memória do computador, ou
mesmo de ele estar ligado. • ressalta-se que o tempo de armazenamento de, e acesso a
dados usando dispositivos de memória secundária é muito maior que usando a memória principal!
4
Variáveis transientes e persistentes
Variáveis transientes e persistentes• O conceito por trás das variáveis persistentes é o de
arquivo– por meio de arquivos, as variáveis podem ser
armazenadas e seus dados acessados e processados a qualquer tempo, tanto pelo programa que as criou quanto por outros programas.
5
Tipos de arquivos• Texto
– arquivo texto é uma sequência de caracteres– dados armazenados de tal forma que em C são
armazenados em variáveis do tipo char.– um arquivo texto aberto num editor de texto
convencional, poder ter seu conteúdo ao menos visualizado e modificado também ... (com caracteres que façam sentido, ou não! ...)
6
Tipos de arquivos
• Binário– Espelho do conteúdo da memória– Comando específico de leitura e escrita– Exemplo
7
1 struct pessoa {2 char nome[50];3 int idade;4 float salario;5 }
50 bytes que armazenam cada uma das variáveis char, mais 32 bits (4 bytes) que armazenam uma variável int, e mais 32 bits (4 bytes) que armazenam uma variável float.
Definição de arquivos no programa
• os arquivos são tratados como variáveis• como todas as outras variáveis, devem ser
declarados• podem ser usados como argumentos para funções• existem funções para realizar todas as operações
sobre arquivos
8
1 FILE *arq;2
na linguagem C o tipo FILE, definido na biblioteca stdio.h, é usado para se trabalhar com arquivos.
Um ponteiro para FILE deve ser declarado sempre que uma variável arquivo for utilizada no programa.
Operações sobre arquivos
9
1 /* Protótipo da função de abertura de arquivos */2 3 FILE *fopen (char *nomearq, char *modo);
Parâmetros:ponteiro para
char – nomearq (nome do
arquivo físico)
outro ponteiro para char com o modo de uso do arquivo e
tipo.1 /* Exemplo */2 FILE *arq1 , *arq2;3 4 arq1 = fopen ("somente_escrita.txt", "w");5 arq2 = fopen ("leio_e_escrevo.meu", "r");
Definição de arquivos no programa• a função fopen()
– avaliação de seu valor de retorno. – erros na abertura de um arquivo
• ex: passar para fopen() o código “r”, mas o arquivo não existe
– retorno de fopen() é NULL indicando a falha na abertura do arquivo
10
1 FILE *arq;2 arq = fopen ("alunos.txt", "r");3 if (arq == NULL) {4 printf ("Erro na abertura de arquivo! Programa terminado...");5 exit (1);6 }
exit() é uma função da biblioteca stdlib.h da linguagem C, que retorna o controle ao SO, passando um código de retorno, e terminando o programa.
Fechamento de arquivos• retorna zero se a operação terminou sem falhas• caso contrário, retorna um valor diferente de zero• recebe como parâmetro um ponteiro para FILE • quando fclose() é usada, os dados pendentes na
“buffer” do arquivo são escritos e o arquivo físico é dissociado de FILE*
11
1 /* Protótipo da função de fechamento de arquivos */2 3 int fclose (FILE *arq);
Operações com arquivos texto• Operações de leitura
– fscanf(), fgets()
• A primeira parece com uma velha conhecida: scanf()
• A segunda será apresentada, para quem ainda não conhece
12
1 /* Protótipos das funções de leitura de arquivos texto*/2 3 int fscanf ( FILE *fp, const char *format, ... );4 char *fgets (char *str, int length, FILE *fp);5
Uso de fscanf(..)
13
fscanf() para de ler a linha quando encontra o fim da linha. Neste caso, cada variável lida. Por este motivo esta função não é indicada para leitura de strings que possam ter um fim de linha em seu conteúdo.
Uso de fgets(..)
14
Operações com arquivos texto
• Operações de escrita– fprintf()
• Parece com uma velha conhecida: printf()
15
1 /* Protótipo da função de escrita de arquivos texto*/2 3 int fprintf ( FILE *fp, const char *format, ... );4
Uso de fprintf(...)
16
Algumas funções úteis
• feof()– verificação de fim de arquivo A função que recebe como parâmetro o
ponteiro associado a um arquivo já aberto (via fopen), retorna zero se o arquivo ainda não chegou ao fim;
17
1 /* Protótipos da função feof() */2 3 int feof(FILE *fp);