Dando continuidade ao estudo sobre arquivos texto e binário com a linguagem de programação C, nesta aula veremos como ler em um arquivo texto com a função fgetc.
Assim como utilizamos, na aula anterior, a função fputc para escrever caracteres em um arquivo, podemos usar sua função irmão, fgetc, para ler caracteres de um arquivo.
Como abrir um arquivo para leitura?
Assim como para a escrita, precisamos abrir o arquivo no modo correto para a ação desejada. Se desejamos ler, então precisamos abrir o arquivo em um dos modos que permite a leitura do arquivo.
Modos de abertura de arquivos: w -> Escrita r -> leitura a -> anexar r+ -> leitura e escrita w+ -> leitura e escrita (apaga o conteúdo caso o arquivo exista) a+ -> leitura e escrita (adiciona ao final do arquivo)
O mais simples é abrir o arquivo usando o modo r, específico para a leitura, mas neste caso não será possível escrever, apenas ler.
// abrindo um arquivo para leitura file = fopen("conto.txt","r");
Como verificar se um arquivo foi aberto corretamente?
Assim como fizemos na aula anterior, é sempre importante verificar se o arquivo foi aberto corretamente a fim de evitar erros durante a execução do programa. Isso pode ser feito facilmente com um teste if, assim:
if(file){ // ler o arquivo aqui } else printf("\n\t--> ERRO ao abrir arquivo!\n");
Agora que o arquivo foi aberto, podemos então ler seu conteúdo.
Como identificar o fim de um arquivo?
Um detalhe importante a saber é que nosso ponteiro (a variável que aponta para o arquivo) é uma struct, ou seja, ela guarda outras informações. Por exemplo, ao abrir um arquivo, o ponteiro está apontando exatamente para o início do arquivo. Conforme vamos lendo seu conteúdo, esse ponteiro vai percorrendo o arquivo, até que em algum momento chegará no fim do arquivo.
É importante entender isso, pois é este teste que usaremos para verificar se já foi lido todo o conteúdo do arquivo, ou seja, se já chegamos ao final do arquivo, ou ainda não.
A biblioteca padrão C já possui uma função para identificar o fim de um arquivo, a função feof: file end of file.
A função feof retorna verdadeiro caso seja o fim do arquivo e falso caso contrário. Como desejamos ler o conteúdo do arquivo enquanto não chegarmos ao final do arquivo, então precisamos negar seu retorno. Enquanto não for o fim do arquivo, leia, assim:
// leitura do arquivo printf("\n\tTexto lido do arquivo:\n"); while(!feof(file)){ // trecho para ler do arquivo }
Como ler caracteres de um arquivo texto com a função fgetc?
A função fgetc é bastante simples. Ela recebe como parâmetro o endereço do arquivo onde será feita a leitura e retorna o caracter que foi lido. Observe que a função lê apenas um caracter. Para lermos todo o conteúdo de um arquivo precisamos de uma repetição para ler enquanto não for o fim do arquivo, assim:
// leitura do arquivo printf("\n\tTexto lido do arquivo:\n"); while(!feof(file)){ letra = fgetc(file); // lê um caracter printf("%c", letra); // imprime o caracter lido }
Ao abrir um arquivo, independente da ação que será realizada, nunca esqueça de fechá-lo, com a função fclose, assim:
// fechando o arquivo fclose(file);
Código de exemplo completo em C com escrita e leitura em arquivo texto
No trecho de código a seguir fazemos uso das duas funções que já aprendemos, fputc para escrever no arquivo e, em seguida, fgets para ler o conteúdo escrito.
Como foi mencionado acima, toda ação realizada no arquivo faz nosso ponteiro caminhar no arquivo. Assim, ao finalizar a escrita, nosso ponteiro estará apontando exatamente para o final do arquivo, o que torna sua leitura impossível.
Para lermos o que foi escrito no arquivo, precisamos que o ponteiro aponte novamente para o início do arquivo. Isso poderia ser feito fechando o arquivo e abrindo o mesmo novamente, mas isso não é nada prático, concorda?
Neste caso podemos usar a função rewind. O objetivo desta função é fazer o ponteiro do nosso arquivo apontar exatamente para o início novamente, independente de para qual região do arquivo ele esteja apontando.
Agora que o ponteiro está novamente apontando para o início do nosso arquivo, podemos então ler seu conteúdo e imprimir no terminal.
/* Aula 209: Como ler em arquivo texto com a função fgetc? Código escrito por Wagner Gaspar Junho de 2021 Modos de abertura de arquivos: w -> Escrita r -> leitura a -> anexar r+ -> leitura e escrita w+ -> leitura e escrita (apaga o conteúdo caso o arquivo exista) a+ -> leitura e escrita (adiciona ao final do arquivo) */ int main(){ FILE *file; char letra; file = fopen("conto.txt","w+"); if(file){ printf("\nDigite um texto e pressione ENTER ao finalizar!"); scanf("%c", &letra); while(letra != '\n'){ fputc(letra, file); scanf("%c", &letra); } rewind(file); printf("\n\tTexto lido do arquivo:\n"); while(!feof(file)){ letra = fgetc(file); printf("%c", letra); } fclose(file); } else printf("\n\t--> ERRO ao abrir arquivo!\n"); return 0; }