Você está na página 1de 16
Programação II Arquivos Prof. Luís Otávio Rigo Júnior DECOM / CEUNES - UFES
Programação II
Arquivos
Prof. Luís Otávio Rigo Júnior
DECOM / CEUNES - UFES
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Boas práticas de programação! • Iniciar com pseudo-código; • Identação e comentários; • Nomes
Boas práticas de programação!
• Iniciar com pseudo-código;
• Identação e comentários;
• Nomes significativos;
• Início e fim de bloco;
• Modularizar c/ caixas pretas;
• Otimizar como último passo.
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Introdução • Programas manipulam variáveis; – Forma abstrata de enxergar os dados; – Internamente indicam
Introdução
• Programas manipulam variáveis;
– Forma abstrata de enxergar os dados;
– Internamente indicam células de memória.
• Até o momento manipulamos apenas a
memória principal;
– Elas deixam de existir quando o programa
acaba;
– Chamada de memória transiente.
Introdução • Conheceremos outro tipo de memória, chamada de memória persistente; – Conteúdo “permanente” e
Introdução
• Conheceremos outro tipo de memória,
chamada de memória persistente;
– Conteúdo “permanente” e acessado por outros
programas;
– Tem capacidade de manter as informações por
um longo tempo.
– Manipulação e acesso mais lento!
• O conceito por trás das variáveis
persistentes é o de arquivo:
– Permitem o armazenamento, acesso e
processamento futuro.
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Tipos de arquivos • Os arquivos são tipos de streams: – Sequências de informações. •
Tipos de arquivos
• Os arquivos são tipos de streams:
– Sequências de informações.
• Existem 2 tipos de arquivos:
– Arquivos texto;
– Arquivos binários.
• Possuem a mesma finalidade;
• O programador define o tipo que o arquivo
pertence:
– Isto determinará o formato das variáveis ele
gravará e acessará do arquivo.
Tipos de arquivos – Arquivos texto • Um arquivo texto é uma sequência de caracteres;
Tipos de arquivos – Arquivos texto
• Um arquivo texto é uma sequência de
caracteres;
• Pode ser aberto no editor de texto
convencional!
– Seu sentido e alteração continuará fazer sentido.
Exemplo de arquivo texto com
impressão de 3 variáveis:
Representação de um
arquivo texto:
real = 145.65
lista = “Lista de caracteres!”
145.65
inteiro = 674
Lista de caracteres!
674
Tipos de arquivos – Arquivos binários • Um arquivo binário é uma sequência de bytes;
Tipos de arquivos – Arquivos binários
• Um arquivo binário é uma sequência de
bytes;
• O arquivo torna-se um espelho da memória
principal.
Representação de um
arquivo binário:
01011011011101011
Exemplo de arquivo binário com
impressão de 3 variáveis:
01010101011010011
01010111101110001
real = 145.65
lista = “Lista de caracteres!”
inteiro = 674
Sua visualização:
8%x$yaIh109K#a$$$
ak;;79@!ia.2.?m
Algumas diferenças • Arquivos binários usam menos memória do que arquivos texto; – Exemplo: •
Algumas diferenças
• Arquivos binários usam menos memória do
que arquivos texto;
– Exemplo:
• Número inteiro:
45
– Armazenamento:
• Texto:
1 byte para cada caracter
• Binário:
apenas 1 byte
• Um conjunto de variáveis (struct) pode ser
acessada e armazenada com um único
comando.
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Definição de arquivos • Para que os arquivos possam ser utilizados por programas, eles devem
Definição de arquivos
• Para que os arquivos possam ser utilizados
por programas, eles devem ser tratados
como variáveis;
• Como tratamos uma variável?
– Declaramos!
– Tipo:
FILE
• Exemplo:
FILE *arq;
• Que biblioteca?
#include <stdio.h>
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Operação sobre arquivos • Todas as operações são realizadas através de funções! – O que
Operação sobre arquivos
• Todas as operações são realizadas através
de funções!
– O que lembra um TAD!!!
• Principais operações:
– Abertura e fechamento - gerais;
• Outras operações:
– Leitura e escrita – dependente do tipo de
arquivos;
Operação sobre arquivos - Abertura • Abertura de arquivos: – É realizada através da função
Operação sobre arquivos - Abertura
• Abertura de arquivos:
– É realizada através da função fopen().
• Protótipo da função fopen():
1. FILE *fopen(const char *nomearq,
const char *modo);
• Descrição:
– const: indica que a variável não pode ser
modificada dentro da função;
– nomearq: é o nome do arquivo;
– modo: indica o tipo de abertura do arquivo;
– valor de retorno: um ponteiro para o arquivo.
Operação sobre arquivos - Abertura • Modo de acesso: Parâmetro Efeito r Abre um arquivo-texto
Operação sobre arquivos - Abertura
• Modo de acesso:
Parâmetro
Efeito
r
Abre um arquivo-texto para leitura
w
Cria um arquivo-texto para escrita
a
Abre um arquivo-texto para gravar ao fim dele
r+
Abre um arquivo-texto para leitura/escrita
w+
Cria um arquivo-texto para leitura/escrita
a+
Abre ou cria (se não existir) um arquivo-texto para ler dele
ou gravar ao fim dele
rb
Abre um arquivo binário para leitura
wb
Cria um arquivo binário para escrita
ab Abre um arquivo binário para gravar ao m dele
r+b
Abre um arquivo binário para leitura/escrita
w+b
Cria um arquivo binário para leitura/escrita
a+b
Abre ou cria um arquivo binário para gravar ao fim dele
Operação sobre arquivos - Abertura • Exemplos: 1. // Declaracao de variaveis. 2. FILE *arq_ex1,
Operação sobre arquivos - Abertura
• Exemplos:
1.
// Declaracao de variaveis.
2.
FILE *arq_ex1, *arq_ex2;
3.
4.
// Abertura de arquivos.
5.
arq_ex1 = fopen(“somente_escrita.txt”, “w”);
6.
arq_ex2 = fopen(“leio_e_escrevo.meu”, “a+b”);
• O valor de retorno da função deve ser
validado!
Operação sobre arquivos - Abertura • Validadação: – O arquivo pode não existir ou pode
Operação sobre arquivos - Abertura
• Validadação:
– O arquivo pode não existir ou pode não ser
aberto;
• Neste caso a função fopen() retornará NULL;
– Indicará que houve falha na abertura do arquivo.
• Exemplo:
1. // Declaracao de variaveis.
2. FILE *arq_ex3;
3.
4. // Abertura de arquivo.
5. arq_ex3 = fopen(“somente_escrita.txt”, “r”);
6.
7. if (arq_ex3 == NULL) {
8. printf(“Erro na abertura do arquivo! Finalizando programa
”);
9. exit (1);
10. }
Operação sobre arquivos - Fechamento • Fechamento de arquivos: – Quando não for mais utilizar
Operação sobre arquivos - Fechamento
• Fechamento de arquivos:
– Quando não for mais utilizar o arquivo, ele deve
ser fechado;
• O fechamento desassocia o arquivo da variável usada.
• Em C, uso da função fclose();
– Protótipo:
1. int fclose(FILE *arq);
– Descrição:
– Retorno 0, indica sucesso no fechamento;
– Exemplo de uso:
1.
fclose(arq_ex4);
– Para usar o arquivo, devemos abrí-lo novamente!
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Operações sobre arquivos texto - Leitura • Existem uma série de funções, dentre elas: •
Operações sobre arquivos texto - Leitura
• Existem uma série de funções, dentre elas:
• fscanf();
• fgets();
• São semelhantes ao uso das funções:
• scanf();
• gets();
• Protótipos das funções:
1. int fscanf(FILE *arq, const char *format,
);
2.
3. char *fgets(char *str, int length, FILE *arq);
Operações sobre arquivos texto - Leitura • Exemplo de uso do fscanf(): 1. #include <stdio.h>
Operações sobre arquivos texto - Leitura
• Exemplo de uso do fscanf():
1. #include <stdio.h>
2.
3.
int main (void) {
4.
int inteiro;
5.
float real;
6.
char str[100];
7.
FILE *arquivo;
8.
arquivo = fopen(“nome_do_arquivo.txt”, “r”);
9.
if (arquivo == NULL) {
10.
printf(“Erro na abertura do arquivo!\n”);
11.
exit (1);
Atenção
12.
}
13.
14.
fscanf(arquivo, “%d\n%s\n%f”, &inteiro, str, &real);
15.
16.
fclose(arquivo);
17.
}
Operações sobre arquivos texto - Leitura • Exemplo de uso do fgets(): 1. #include <stdio.h>
Operações sobre arquivos texto - Leitura
• Exemplo de uso do fgets():
1. #include <stdio.h>
2.
3.
int main (void) {
4.
char str1[100];
5.
char str2[50];
6.
FILE *arquivo;
7.
8.
arquivo = fopen(“nome_do_arquivo.txt”, “r”);
9.
if (arquivo == NULL) {
10.
printf(“Erro na abertura do arquivo!\n”);
11.
exit (1);
12.
}
13.
14. fgets(str1, 100, arquivo);
15. fgets(str2, 50, arquivo);
16.
17. fclose(arquivo);
Atenção
18. }
Operações sobre arquivos texto - Escrita • Em C, usa se a função fprintf(); •
Operações sobre arquivos texto - Escrita
• Em C, usa se a função fprintf();
• Seu uso também é semelhante ao printf()!
• Seu protótipo:
1. int fprintf(FILE *arq, const char
*format,
);
Operações sobre arquivos texto - Escrita • Exemplo de uso do fprintf(): 1. #include <stdio.h>
Operações sobre arquivos texto - Escrita
• Exemplo de uso do fprintf():
1.
#include <stdio.h>
2.
#define NOME_ARQUIVO
“seu_arquivo.txt”
3.
#define TAM_STR
50
4.
int main (void) {
5.
float real = 547.32; char caract = „T‟;
6.
char str[TAM_STR] = “teste para string”;
7.
FILE *arquivo;
8.
9.
arquivo = fopen(NOME_ARQUIVO, “w”);
10.
if (arquivo == NULL) {
11.
printf(“Erro na abertura do arquivo!\n”);
12.
exit (1);
13.
}
14.
fprintf(arquivo, “%f\n%c\n%s\n”, real, caract, str);
15.
fprintf(arquivo, “Outra string – constante\n”);
16.
fclose(arquivo);
17.
}
Roteiro • Lembrete! • Introdução • Tipos de arquivos • Definição de arquivos • Operação
Roteiro
• Lembrete!
• Introdução
• Tipos de arquivos
• Definição de arquivos
• Operação sobre arquivos
• Operações sobre arquivos texto
• Operações sobre arquivos binários
Operações sobre arquivos binários - Leitura • C possui a função fread(); • Protótipo: 1.
Operações sobre arquivos binários -
Leitura
• C possui a função fread();
• Protótipo:
1. size_t fread(void *buffer, size_t
num_bytes, size_t count, FILE *arq);
• Descrição:
– buffer: é um ponteiro para a região da memória
que receberá as variáveis lidas;
– num_bytes: número de bytes a serem lidos;
– count:
quantas
variáveis
do
tamanho
num_bytes serão lidas.
– variável de retorno: um inteiro sem sinal, indica
a quantidade de itens lidos.
Operações sobre arquivos binários - Leitura • Exemplo de uso do fread(): 1. int inteiro;
Operações sobre arquivos binários -
Leitura
• Exemplo de uso do fread():
1.
int inteiro;
2.
float real;
3.
char caract;
4.
5.
/*
*/
6.
fread(&inteiro, sizeof (int), 1, arquivo);
7.
fread(&real, sizeof (float), 1, arquivo);
8.
fread(&carac, sizeof (char), 1, arquivo);
Operações sobre arquivos binários - Escrita • C possui a função fwrite() • Protótipo: 1.
Operações sobre arquivos binários -
Escrita
• C possui a função fwrite()
• Protótipo:
1. size_t fwrite(void *buffer, size_t
num_bytes, size_t count, FILE *arq);
• Descrição:
– buffer: é um ponteiro para a região da memória
que receberá as variáveis lidas;
– num_bytes: número de bytes a serem lidos;
– count:
quantas
variáveis
do
tamanho
num_bytes serão lidas;
– variável de retorno: um inteiro sem sinal, indica
a quantidade de itens lidos.
Operações sobre arquivos binários - Escrita • Exemplo de uso do fwrite(): 1. typedef struct
Operações sobre arquivos binários -
Escrita
• Exemplo de uso do fwrite():
1.
typedef struct str_Pessoa {
2.
char nome[50];
int idade;
char sexo;
3.
} tipo_Pessoa;
4.
int main (void) {
5.
FILE *arquivo;
6.
tipo_Pessoa p;
7.
8. strcpy(p.nome, “um nome qualquer!”);
9. p.idade = 56;
10. p.sexo = „F‟;
11.
12. if ((arquivo = fopen(“nome_do_arquivo.bin”, “wb”)) == NULL) {
13. printf(“Erro na abertura do arquivo!\n”);
14. exit (1);
15. }
16. fwrite(&p, sizeof (tipo_Pessoa), 1, arquivo);
17. fclose(arquivo);
18. }
Operações sobre arquivos binários – Leitura • Exemplo de função que usa fread(): 1. typedef
Operações sobre arquivos binários –
Leitura
• Exemplo de função que usa fread():
1. typedef struct str_Pessoa {
2. char nome[50];
int idade;
char sexo;
3. } tipo_Pessoa;
4.
5. tipo_Pessoa
le_Pessoa (char
nomedoarquivo[100]) {
6. FILE *arquivo;
7. tipo_Pessoa p;
8.
9. if ((arquivo = fopen(nomedoarquivo, “rb”)) == NULL) {
10. printf(“Erro na abertura do arquivo!\n”);
11. exit (1);
12. }
13. fread(&p, sizeof (tipo_Pessoa), 1, arquivo);
14.
15. fclose(arquivo);
16.
17. return p;
18. }