Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação:...

17
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres

Transcript of Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação:...

Page 1: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

Programação II

Arquivos

Autoria: Ernani SantosModificação: Clebson Oliveira

Adaptação: Claudia Boeres

Page 2: Programação II Arquivos Autoria: Ernani Santos Modificaçã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

Page 3: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

• 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

Page 4: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

• 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

Page 5: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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

Page 6: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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

Page 7: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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.

Page 8: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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.

Page 9: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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");

Page 10: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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.

Page 11: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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

Page 12: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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

Page 13: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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.

Page 14: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

Uso de fgets(..)

14

Page 15: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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

Page 16: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

Uso de fprintf(...)

16

Page 17: Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.

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