![]() |
Aula 20: Ficheiros |


Hoje vamos aprender como ler de ficheiros e como escrever para
ficheiros.
Como exemplo vamos apenas aprender como ler e escrever ficheiros de
texto,
ficheiros em que a informação é armazenada em
formato
ASCII. Estes ficheiros diferem do formato binário porque
também
podem ser legíveis para os humanos. Quando escrevemos os nossos
programas nas aulas práticas temos utilizado ficheiros de texto.
| FILE
fopen() fclose() fscanf() fprintf() |
feof()
fputs() fgets() fputc() fgetc() |
| FILE *filehandle; |
Com filehandle a
variável
que irá armazenar o ponteiro para a informação.
Isto
NÃO
é igual ao nome do ficheiro, como iremos ver. Esta
declaração
deve ser feita no mesmo local das outras variáveis.
Exemplo:
FILE *f;
Isto cria f um ponteiro para
um handle de ficheiro.
Só a título de curiosidade, não é preciso
saber isto, o tipo de variável FILE está definido como
typedef struct{
short
level;
unsigned
flags;
char
fd;
unsigned char hold;
short
bsize;
unsigned char *buffer, *curp;
unsigned
istemp;
short
token;
} FILE;
Para mais informação, ver a ajuda do compilador.
| fopen() |
| diminutivo de "file open". Abre um ficheiro. |
| definição da função: FILE
*fopen(const char *filename, const char *mode)
abre um ficheiro. Retorna 0 se não for bem sucedida. |
fopen() retorna um ponteiro
para
um FILE (ao qual podemos atribuir a nossa variável do tipo
ponteiro-FILE).
fopen() recebe dois
parâmetros,
ambos strings (pointeiros para char). O primeiro é o nome do
ficheiro
e o segundo é a forma como deve ser aberto, ("r") para leitura,
("w") para escrita, ou ("a") para acrescentar ao final do ficheiro.
Exemplos:
Para abrir um ficheiro chamado "OLA.TXT" para leitura usamos
FILE *f;
f = fopen("OLA.TXT", "r");
Para abrir um ficheiro chamado "output.asc" para escrita usamos
FILE *f;
f = fopen("output.asc", "w");
| fscanf() |
| diminutivo de "file scan fornatted". input a partir do ficheiro |
| definição da função: int
fscanf(FILE *stream, const char *format, ....)
obtém input formatado do ficheiro |
| fprintf() |
| diminutivo de "file print formatted". Output formatado para o ficheiro |
| definição da função: int
fprintf(FILE *stream, const char *format, ...)
o resultado vai para um ficheiro . Retorna o número de caracteres escritos, EOF se falhar. |
De notar que só podemos usar instruções fscanf
para ficheiros que tenham sido previamente abertos para leitura ("r") e
fprintf
é para ser utilizada apenas com ficheiros que tenham sido
abertos
para escrita ("w"). Exemplos:
fprintf(f, "%f", r);
fscanf(f, "%d", opcao);
![]() |
![]() |
|
|
|
![]() |
![]() |
|
|
|
| fclose() |
| diminutivo de "file close". Fecha um ficheiro. |
| definição da função: int
fclose(FILE *stream)
fecha um ficheiro. Retorna 0 se tiver sucesso. |
por exemplo:
fclose(f);

Exemplo:
while (!eof(f))
{
fscanf("%s", s);
}
que irá ler do ficheiro até que
seja encontrado o fim do ficheiro.
| código | ecrãn | ficheiro TEST.TXT
depois de correr o programa |
| /* With File Output */
#include <stdio.h> FILE *f;
void main()
|
Name of File:
TEST.TXT |
1 Hello
2 Hello 3 Hello 4 Hello 5 Hello 6 Hello 7 Hello 8 Hello 9 Hello 10 Hello |
| código | ecrãn | ficheiro TEST.TXT antes
de correr o programa |
| /* With File Input */
#include <stdio.h> FILE *f;
void main()
|
Name of File:
TEST.TXT 1 Hello 2 Hello 3 Hello 4 Hello 5 Hello 6 Hello 7 Hello 8 Hello 9 Hello 10 Hello |
1 Hello
2 Hello 3 Hello 4 Hello 5 Hello 6 Hello 7 Hello 8 Hello 9 Hello 10 Hello |
| fgets() |
| diminutivo de "file get string". Lê uma string do ficheiro. |
| definição da função: char
*fgets(char s1, int n, FILE *stream)
lê uma string do ficheiro até eol (end of line), eof (end of file) ou o máximo de n-1 caracteres serem lidos |
| fgetc() |
| diminutivo de "file get char". Lê um caracter do ficheiro. |
| definição da função: int
fgetc(FILE *stream)
lê um único caracter do ficheiro. Retorna o valor do caracter se bem sucedida. |
| fputs() |
| diminutivo de "file put string". Escreve uma string para o ficheiro. |
| definição da função: int
fputs(const char s1, FILE *stream)
escreve uma string para o ficheiro. Retorna 0 se bem sucedida. |
| fputc() |
| diminutivo de "file pu char". Escreve um caracter para o ficheiro. |
| definição da função: int
fputc(char *s1, FILE *stream)
escreve um único caracter para o ficheiro. Retorna o valor do caracter se bem sucedida. |