Buscar

M7 - Tratamento de Ficheiros - parte 1

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 43 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 43 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 43 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

Módulo 7
Tratamento de Ficheiros
PSI 1º ano
2018/2019
TGPSI - Paulo Reis - Agrupamento de Escolas da Batalha 2
Tratamento de Ficheiros
- Parte 1-
3
Ficheiros
Conceitos gerais
4
Modelo de um Computador
Armazenamento 
secundário
CPU
Central de 
Processamento
Memória
Dispositivos de 
entrada/saída
Canal de comunicação (BUS)
5
Motivação
 Os ficheiros são utilizados para
guardar dados depois de o programa
que os gerou ter terminado;
 O motivo pelo qual se torna
fundamental a utilização de ficheiros
resulta da necessidade de perpetuar
os dados para além do ciclo de
vida de um programa.
 Os dados armazenados nas variáveis criadas pela execução do 
programa, residentes na memória principal, que apenas se 
encontram disponíveis enquanto o programa está em execução.
 a utilização de ficheiros, armazenados em suportes secundários, 
não fica dependente do programa estar em execução.
6
Características 
 Podem armazenar grande quantidade de informação;
 Dados são persistentes (ex: gravados em disco);
 Acesso aos dados pode ser não sequencial (ex: acesso
direto a registos numa base de dados);
 Acesso à informação pode ser concorrente (ex: mais de
um programa ao mesmo tempo).
7
Nomes e extensões
ficheiro tipo
arq.txt Ficheiro de texto simples
arq.c Código fonte em C
arq.pdf Portable document format
arq.html Ficheiro HyperText Markup Language
arq.exe Ficheiro executável (Windows)
arq* Ficheiro executável (Unix)
arq.bmp Ficheiro de imagem bitmap
arq.mp3 Ficheiro de áudio
arq.png Ficheiro de imagem Portable Network Graphics
arq.dll Biblioteca
 Exemplos comuns:
8
 Pasta ou Diretório contém ficheiros e/ou outros diretórios
Diretórios (ou pastas)
cat.exels.exerm.exe
file1.txt file2.c cat.txt
9
 Caminho absoluto:
 Descrição de um caminho desde o diretório raiz:
• Exemplo (linux)
/bin/cat.exe
/usr1/bill/file2.c
• Exemplo (windows)
Program Files\DVD-Maker\readme.txt
Utilizadores\Paulo\arq.txt
 Caminho relativo:
 Descrição de um caminho desde o diretório corrente 
(ex: usr):
bill/File2.c
Caminhos absolutos ou relativos
10
 nome do ficheiro;
 proprietário do ficheiro;
 datas de criação, alteração e acesso;
 tamanho em bytes;
 permissão de acesso.
• r : leitura
• w : escrita
• x : execução
 Em linux ver os comandos ls -l e stat
 Em Windows ver o comando dir /A
Atributos dos ficheiros
11
 Fonte de dados para o programa: 
 ficheiro de entrada (input)
 Destino dos dados do programa:
 ficheiro de saída (output) 
Utilização de Ficheiros
12
 Dados de entrada para um programa são fornecidos a 
partir de periféricos de entrada (teclado, rato, leitor 
código barras, …) 
 Dados de saída fornecidos pelo programa são enviados 
para periféricos de saída (monitor, impressora, …)
Tipos de periféricos
13
 Um ficheiro em C é visto como uma sequência (stream) 
de bytes... normalmente com uma marca que indica o fim 
do ficheiro, end-of-file (EOF).
Linguagem C
Criação de Ficheiros
14
Streams
 Em C, independentemente do tipo de periférico que se 
utilize, são processadas todas as entradas e saídas 
através de streams.
15
 A um ficheiro aberto estará associado uma stream.
 Três canais (fluxos de dados) são automaticamente 
abertos quando um programa é iniciado: standard input, 
standard output e standard error.
 A abertura de um ficheiro 
devolve um apontador para 
uma estrutura FILE. 
Para os ficheiros standard, 
os apontadores são: 
stdin, stdout, e stderr.
16
Tipos de Ficheiros em C
 Ficheiro de texto - armazena 
carateres que podem ser 
mostrados diretamente no ecrã 
ou modicados por um editor de 
texto simples. 
 Ficheiro binário – sequência de 
bits sujeita as convenções do 
programa que o gerou 
(exemplos: ficheiros executáveis, 
ficheiros compactados, ficheiros 
de registos).
17
Operações básicas sobre ficheiros
 O processo de trabalhar com ficheiros em C consiste em 
três etapas:
1. Abrir o ficheiro;
2. Ler e/ou gravar as informações desejadas no ficheiro;
3. Fechar o ficheiro. 
18
Abertura do ficheiro 
 Em C, para podermos trabalhar um ficheiro, precisamos de 
o abrir e associar a uma variável interna do programa. Para 
isso, usamos variáveis do tipo FILE * que podem ser 
declaradas assim:
FILE *entrada;
FILE *saida;
 A associação entre a variável e ficheiro é feita através da 
função fopen(), que funciona da seguinte maneira:
entrada = fopen("ficheiro_entrada.txt", "r");
saida = fopen("ficheiro_saida.txt", "w");
19
Abertura do ficheiro 
FILE *fich;
fich = fopen(nome, modo de abertura);
FILE é uma estrutura 
ficheiros
FILE é uma estrutura 
nativa do C para o tipo de 
ficheiros Declaramos um 
estrutura 
Declaramos um 
apontador (*fich) para 
usar como variável para a 
estrutura 
O apontador será 
igual ao ficheiro 
devolvido pela 
função fopen()
Este é nome
(caminho relativo 
ou absoluto) do 
ficheiro
O modo de 
abertura indica se 
queremos abrir / 
criar / recriar
Se de erro o 
fica NULL
Se de erro o 
apontador 
fica NULL
20
fopen( )
 Protótipo da função de abertura:
FILE *fopen (char *nome_ficheiro, char *modo);
 O parâmetro nome_ficheiro:
 é o nome e o local onde o ficheiro se encontra 
fisicamente ou, se for criado, onde o ficheiro deve 
ser armazenado.
 O parâmetro modo: 
 especifica como o ficheiro deve ser aberto.
21
Modos de acesso/abertura
22
Exemplo de código
 A função fopen() tem duas finalidades:
 abrir uma fila de bytes (stream);
 ligar um ficheiro em disco à stream.
FILE *fopen(char *NomeArquivo, char *modo);
 Se existir algum erro de abertura, a função fopen()
devolve o valor NULL.
23
Programa-Exemplo
i. Executar o programa.
ii. Mudar o modo de abertura de w para r.
iii. Mudar o nome do ficheiro para arquivo1.txt.
iv. Mudar o caminho do ficheiro para a pasta Documentos do computador. 
24
Fechar o ficheiro 
 O processo de fechar o ficheiro serve para libertar a 
memória que foi utilizada para trabalhar com o ficheiro, 
além de permitir desbloqueá-lo para uso por outros 
programas (em execução simultânea). 
Esta tarefa é bem simples (e deve ser executada para cada 
ficheiro que foi aberto):
fclose(entrada);
fclose(saida);
25
fclose( )
 Protótipo da função de fecho:
int fclose (FILE *fich);
 O apontador fich é passado à função fclose() e 
determina o ficheiro a ser fechado.
 A função devolve o valor zero se o fecho do ficheiro foi 
bem sucedido ou a constante EOF (End Of File) em 
caso de erro.
26
Leitura de carateres de um ficheiro
 Para leitura de ficheiros existem quatro funções, sendo 
três análogas às usadas para saída padrão:
Saída padrão Ficheiros Explicação
getchar fgetc Recebe apenas um caractere.
gets fgets
Lê uma string (geralmente uma 
linha inteira).
scanf fscanf Recebe uma string formatada.
N/A fread Lê dados binários de um ficheiro.
27
fgetc( )
 Protótipo:
int fgetc (FILE *fich);
 A função fgetc() lê um carater no ficheiro passado por 
parâmetro (previamente aberto pela função fopen) e 
devolve-o como resultado da função.
 Se por acaso já não existir a qualquer carater no 
ficheiro, isto é, se a função detetar uma situação de 
End-Of-File devolve a constante EOF.
28
fgets( )
 Protótipo:
char *fgets (char *str, int tamanho,FILE *fich);
 A função fgets() lê uma linha inteira de uma vez. 
Recebe três argumentos: a string a ser lida, o limite 
máximo de caracteres a serem lidos e o ponteiro para 
FILE
 Se a função for executada com sucesso devolve o 
endereço da string lida, caso contrário retorna NULL.
29
fscanf( )
 Protótipo:
int fscanf (FILE *fp, char *str,...);
 A função fscanf() funciona como a função padrão 
scanf(), porém, ao invés de ler os dados de teclado, os 
dados são lidos de ficheiro.
30
Escrita de carateres para um ficheiro
 Para escrever em ficheiros existem quatro funções, sendo 
três análogas às usadas para saída padrão:
Saída padrão Ficheiros Explicação
putchar fputc Imprime apenas um caractere.puts fputs
Imprime uma string diretamente, 
sem nenhuma formatação.
printf fprintf Imprime uma string formatada.
N/A fwrite
Grava dados binários para um 
ficheiro.
31
fputc( )
 Protótipo:
int fputc (int ch, FILE *fich);
 A função fputc() escreve um caractere no ficheiro.
32
fputs( )
 Protótipo:
int fputs(const char *string, FILE *fich);
 A função fputs() escreve uma string para o ficheiro, mas 
não incluindo o caractere nulo.
 Se a função não for executada com sucesso devolve a 
constante EOF.
33
fprintf( )
 Protótipo:
int fprintf(FILE *fich, const char *format,...);
 A função fprintf() envia uma saída formatada para um 
ficheiro.
34
Outras funções úteis
 A função feof() devolve um valor não-zero se o ficheiro 
chegou ao EOF, caso contrário devolve zero:
int feof (FILE *fich);
 Outra forma de se verificar se o final do ficheiro foi atingido 
é comparar o caractere lido por getc() com EOF.
35
 A função ferror() devolve o valor zero se nenhum erro 
ocorreu e um número diferente de zero se algum erro 
ocorreu durante o acesso ao ficheiro:
int ferror (FILE *fich);
 É útil para verificar se cada acesso a um ficheiro teve 
sucesso, de modo que consigamos garantir a integridade dos 
dados. Na maioria dos casos, se um ficheiro pode ser aberto, 
pode ser lido ou gravado. Porém, existem situações em que 
isto não ocorre (exemplo: pode acabar o espaço em disco 
enquanto gravamos, ou o disco pode estar com problemas e 
não conseguimos ler, etc.).
 Em conjunto com a ferror() é usada a função 
perror() (print error), cujo argumento é uma string que 
normalmente indica em que parte do programa o 
problema ocorreu.
Prontos para a ação ?!
36
Hora de resolver…
37
1) Compilar o seguinte programa.
ficheiro01.c
38
2) Criar no disco a pasta tmp e o ficheiro texto.txt.
3) Executar novamente o programa.
4) Abrir o ficheiro texto.txt com o Bloco de Notas e de 
seguida executar o programa. Verificar o que acontece.
39
5) Criar o seguinte programa. Tentar abrir texto.txt.
ficheiro02.c
40
6) Criar o seguinte programa. Depois abrir texto.txt.
ficheiro03.c
41
7) Implementar um programa cujo output seja semelhante ao 
seguinte: 
ficheiroDesafio1.c
42
8) Implementar um programa cujo output seja semelhante ao 
seguinte: 
ficheiroDesafio2.c
43
The Evolution of Data Storage

Outros materiais