Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação 1
18. Ficheiros
FEUP, DEI
Programação 1, 2020/2021
Ficheiros ficheiro.txt
…
2
FEUP, DEI
Programação 1, 2020/2021
Ficheiros de texto
Informação é guardada sob a forma de linhas de texto,
separadas por um caráter terminador de linha, '\n’
código representação
ASCII textual
FEUP, DEI
Programação 1, 2020/2021
Ficheiros binários
Organizados em elementos de dimensão fixa que podem
ser de tipos simples ou estruturados (registos). Portanto,
nos ficheiros binários não há marcas de "fim de elemento",
porque o fim de cada elemento é sempre conhecido.
Inteiros representados por dois bytes: registos com string de quatro carateres e
{ 12, 1283, 128, 0, 15371 } inteiro representado por dois bytes:
{{"ABC",129}, {"P1",1152}}
"P1" 1152
15371
4
FEUP, DEI
Programação 1, 2020/2021
Utilização
Os ficheiros de texto podem ser editados e
inspecionados com qualquer editor de texto. .txt .c .html
FEUP, DEI
Programação 1, 2020/2021
ficheiro
programa disco
buffer
6
FEUP, DEI
Programação 1, 2020/2021
FILE
O "file buffer" é um registo designado FILE, que contém
(entre outros) um campo vetor de carateres, um campo para
indicar o estado de preenchimento do buffer e um campo de
nome que irá estar associado a um dado ficheiro.
FILE *f
FEUP, DEI
Programação 1, 2020/2021
fopen e fclose
FILE *fopen(char *filename, char *mode) "r" – para leitura (read)
int fclose(FILE *f) "w" – para escrita (write)
"a" – para acrescentar
FILE *f; (append)
char nomef[100]; "b" – formato binário
printf("nome do ficheiro? "); (binary)
scanf("%s", nomef);
f=fopen(nomef,"w");
...
fclose(f);
FEUP, DEI
Programação 1, 2020/2021
fprintf e fscanf
Ficheiros de texto
FILE *f;
int numero;
f=fopen("exemplo.txt","w");
scanf("%d", &numero);
fprintf(f, "um numero lido: %d\n", numero);
fclose(f);
10
FEUP, DEI
Programação 1, 2020/2021
int main()
{
int i,k;
char *cidade[4] = {"Porto", "Aveiro", "Coimbra", "Lisboa"};
float temp[4] = {12.5, 11.8, 12.2, 14};
FILE *fout; /* declara variável de ficheiro */
fclose(fout);
printf("Escrita do ficheiro terminada\n");
}
11
FEUP, DEI
Programação 1, 2020/2021
Controlo de erros
#include <stdio.h>
int main()
{
int i,k;
char *cidade[4] = {"Porto", "Aveiro", "Coimbra", "Lisboa"};
float temp[4] = {12.5, 11.8, 12.2, 14};
FILE *fout; /* declara variável de ficheiro */
fclose(fout);
printf("Escrita do ficheiro terminada\n");
}
12
FEUP, DEI
Programação 1, 2020/2021
fgetc e fputc
Ficheiros de texto
int c;
FILE *ifp, *ofp;
13
FEUP, DEI
Programação 1, 2020/2021
fread e fwrite
Ficheiros binários
#include <stdio.h>
int main()
{
short v[4] = {1200, 200, 56, 14};
FILE *f;
f = fopen("int.bin", "wb");
fwrite(v, sizeof(short), 4, f);
fclose(f);
printf("Escrita do ficheiro terminada\n");
}
14
FEUP, DEI
Programação 1, 2020/2021
15
FEUP, DEI
Programação 1, 2020/2021
ftell e rewind
a posição corrente, em bytes, dentro de um ficheiro é dada por:
long ftell(FILE *fich)
#include <stdio.h>
#include <string.h>
int main()
{
int n; FILE *f;
f = fopen("real.dat", "rb");
fseek(f,0, SEEK_END); /* vai para o fim */
n = ftell(f);
printf("Bytes: %d; Reals: %d\n", n, n/sizeof(float));
fclose(f);
}
16
FEUP, DEI
Programação 1, 2020/2021
É possível passar informação de entrada tal como para qualquer outra função.
argc (número)
17
FEUP, DEI
Programação 1, 2020/2021
FEUP, DEI
Programação 1, 2020/2021
Avisos
• Aula prática 10
– Preparar problema 2 (disponível no Moodle)
• Microteste 3
– Exemplos disponibilizados no Moodle
19
FEUP, DEI