aula 209

Como ler em um arquivo texto com a função fgetc?

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;
}

Deixe um comentário

17 + 15 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.