Das várias funções disponíveis para a leitura e escrita de ficheiros de texto byte-a-byte, ou seja, caracter-a-caracter, vou concentrar este pequeno exemplo apenas nas funções fgetc e fputc.
fgetc – Ler um caracter de um ficheiro
Protótipo: int fgetc(FILE *nomeficheiro)
Exemplo de leitura de um caracter:
caracter = fgetc(nome);
Notar que o caracter lido é armazenado na variável caracter, do tipo int, e que a função vai posicionar -se no ficheiro na próxima posição, ou seja, no caracter seguinte. Não há necessidade de invocar funções de posicionamento para esse efeito.
Programa exemplo :
O programa seguinte lê o ficheiro “texto.txt” e conta o número de caracteres.
Para focar apenas o essencial não vou incluir qualquer tipo de verificação (falha de segmentação) e parto do princípio que existe o ficheiro “texto.txt” na directoria onde vamos testar o programa. Será conveniente utilizar um editor de texto para criar o ficheiro de texto, que pode ser algo do tipo:
Agora vamos ao código.
#include <stdio.h>
int main(){
FILE *fp; /* apontador para o ficheiro */
int contador = 0; /* variável para contar os caracteres */
/* Abrir o ficheiro */
fp = fopen("texto.txt", "r");
/* Contar os caracteres do ficheiro */
while (fgetc(fp) != EOF)
contador++;
printf("Número total de caracteres = %d\n",contador);
/* Fechar o ficheiro */
fclose(fp);
/* Terminar o programa */
return 0;
}
Observações:
- O ficheiro é aberto no modo de leitura, e parte-se do princípio que este existe.
- Cada caracter lido não é armazenado numa variável, sendo utilizado apenas na condição do ciclo “while”.
- Foi utilizado um ciclo “while” para percorrer o ficheiro byte-a-byte, utilizando a constante simbólica EOF para controlar o fim do ficheiro (EOF=End Of File, cujo valor é -1).
- Conte atentamente os caracteres do ficheiro de texto, pois até as mudanças de linha são representadas por um caracter “invisível”.
Caso pretendessemos realizar alguma operação com os caracteres lidos, como por exemplo mostrar o conteúdo do ficheiro antes de apresentar a contagem dos caracteres, facilmente poderíamos alterar o código para a versão apresentada a seguir.
#include <stdio.h>
int main(){
FILE *fp; /* apontador para o ficheiro */
int contador = 0; /* para contar os caracteres */
int caracter; /* inteiro para armazenar cada caracter lido */
/* Abrir o ficheiro */
fp = fopen("texto.txt", "r");
/* Contar os caracteres do ficheiro */
while ((caracter=fgetc(fp)) != EOF){
putchar(caracter);
contador++;
}
printf("\nNúmero total de caracteres = %d\n",contador);
/* Fechar o ficheiro */
fclose(fp);
/* Terminar o programa */
return 0;
}
Observações:
- A variável “caracter” foi declarada com o tipo “int”. Isto deve-se ao facto de haver necessidade de comparar os caracteres lidos com a constante EOF, que como já referi tem o valor -1, que não é suportado pelo tipo “char”.
fputc – Escrever um caracter num ficheiro
Protótipo: int fputc(int caracter, FILE *nomeficheiro)
Exemplo de escrita de um caracter:
fputc('x', nome);
O caracter ‘x’ é escrito no ficheiro apontado por “nome”.
Programa exemplo :
O programa seguinte armazena uma cadeia de caracteres num ficheiro “texto.txt”. Caso o ficheiro já exista este será substituído.
#include <stdio.h>
int main(){
FILE *fp; /* apontador para o ficheiro */
char texto[]="que lindo dia\nai ai"; /* texto a enviar para o ficheiro */
int i=0; /* para ler a string caracter a caracter */
/* Abrir o ficheiro */
fp = fopen("texto.txt", "w");
/* Contar os caracteres do ficheiro */
while (texto[i]!='\ 0')
fputc(texto[i++], fp);
/* Fechar o ficheiro */
fclose(fp);
/* Terminar o programa */
return 0;
}
Observações:
- Não tem nada a ver com linguagem C, mas tive que utilizar um espaço entre os caracteres \ e 0. Caso queiram compilar o programa não se esqueçam de remover este espaço. O plugin que estou a utilizar no WordPress não está a 100%. Corrijo isto assim que me for possível (ver linha 11) .
- O ficheiro é aberto no modo de escrita “w”, pelo que caso não exista será criado, e caso contrário será substituído ( ver modos de abertura ).
- A string é percorrida caracter-a-caracter até ser detectado o seu terminador, ou seja, o caracter ”.
- A instrução fputc(texto[i++], fp); primeiro escreve o caracter no ficheiro, e de seguida incrementa o valor de i.

Outubro 22, 2008 ás 7:57 am
OBRIGADO ta muito bem explicado consegui boa nota por ter visto isto ^^
Outubro 22, 2008 ás 7:58 am
Esta bastante bom parabens muito bem explicado e conseguido.
Dezembro 11, 2008 ás 11:26 pm
gostaria de saber o codigo fonte para guardar o conteudo de uma estrutura num ficheiro de texto. alguem me pode dizer komo se faz?
foco à espera de uma resposta!
Dezembro 12, 2008 ás 1:20 pm
Não será um ficheiro binário que queres?
Dezembro 13, 2008 ás 6:49 pm
fprintf/fscanf não serve para o que queres?
Vê este link (Exemplo de escrita 2:):
http://gracianotorrao.wordpress.com/2008/10/05/manipulacao-de-ficheiros-de-texto-em-linguagem-c-manipulacao-de-ficheiros-de-texto-em-linguagem-c-leituraescrita-formatada/
Janeiro 20, 2009 ás 5:40 pm
eu gostava de saber como se faz o jogo quem quer ser milionario em ficheiros c
Janeiro 20, 2009 ás 5:50 pm
sera que alguem me pode ajudar nisso
Junho 15, 2009 ás 9:40 am
Bom dia malta.
Preciso de saber como abir ficheiros de texto usando listas(Estruturas Dinâmicas).
Usando arrays, limitamos a quantidade de caracteres que serao lidos, eu pretendo usar listas com as funçoes maloc(); e free();, mas nao sei como inserir os caracteres lidos para dentro da lista e imprimi-los.
CD
Junho 17, 2009 ás 1:31 pm
Será que algeum me pode ajudar?
Não sei como inserir as palavras lidas de dentro do ficheiro para a LISTA.
CD
Novembro 1, 2009 ás 10:51 pm
Funciona a 100%. Obrigado