Curso de C

Abrindo e Fechando um Arquivo


No sistema de entrada e saída ANSI é definido o tipo "ponteiro de arquivo". Este não é um tipo propriamente dito, mas uma definição usando o comando typedef. Esta definição está no arquivo cabeçalho stdio.h ou stdlib.h dependendo do seu compilador. Podemos declarar um ponteiro de arquivo da seguinte maneira:

FILE *p;

p será então um ponteiro para um arquivo. É usando este tipo de ponteiro que vamos poder manipular arquivos no C.

fopen

Esta é a função de abertura de arquivos. Seu protótipo é:

                FILE *fopen (char *nome_do_arquivo,char *modo);

O nome_do_arquivo determina qual arquivo deverá ser aberto. Este nome deve ser válido no sistema operacional que estiver sendo utilizado. O modo de abertura diz à função fopen() que tipo de uso você vai fazer do arquivo. A tabela abaixo mostra os valores de modo válidos:
 

Modo

Significado

"r"

Abre um arquivo para leitura

"w"

Cria um arquivo para escrita

"a"

Acrescenta dados no fim do arquivo ("append")

"rb"

Abre um arquivo binário para leitura

"wb"

Cria um arquivo binário para escrita

"ab"

Acrescenta dados binários no fim do arquivo

"r+"

Abre um arquivo para leitura e escrita

"w+"

Cria um arquivo para leitura e escrita

"a+"

Acrescenta dados ou cria uma arquivo para leitura e escrita

"r+b"

Abre um arquivo binário para leitura e escrita

"w+b"

Cria um arquivo binário para leitura e escrita

"a+b"

Acrescenta dados ou cria uma arquivo binário para leitura e escrita

"rt"

Abre um arquivo texto para leitura

"wt"

Cria um arquivo texto para escrita

"at"

Acrescenta dados no fim do arquivo texto

"r+t"

Abre um arquivo texto para leitura e escrita

"w+t"

Cria um arquivo texto para leitura e escrita

"a+t"

Acrescenta dados ou cria uma arquivo texto para leitura e escrita

Poderíamos então, para abrir um arquivo binário, escrever:

FILE *fp;
fp=fopen ("exemplo.bin","wb");
if (!fp)
        printf ("Erro na abertura do arquivo.");

A condição !fp testa se o arquivo foi aberto com sucesso porque no caso de um erro a função fopen() retorna um ponteiro nullo (NULL).

exit

Aqui abrimos um parênteses para explicar a função exit() cujo protótipo é:

                void exit (int codigo_de_retorno);

Esta função aborta a execução do programa. Pode ser chamada de qualquer ponto no programa e faz com que o programa termine e retorne, para o sistema operacional, o código_de_retorno. A convenção mais usada é que um programa retorne zero no caso de um término normal e retorne um número não nulo no caso de ter ocorrido um problema. A função exit() se torna importante em casos como alocação dinâmica e abertura de arquivos pois pode ser essencial que uma determinada memória seja alocada ou que um arquivo seja aberto. Poderíamos reescrever o exemplo da seção anterior usando agora o exit() para garantir que o programa não deixará de abrir o arquivo:

#include <stdio.h
main (void)
{
FILE *fp;
...
fp=fopen ("exemplo.bin","wb");
if (!fp)
        {
        printf ("Erro na abertura do arquivo. Fim de programa.");
        exit (1);
        }
...
return 0;
}

fclose

Quando abrimos um arquivo devemos fechá-lo. Para tanto devemos usar a função fclose():

                int fclose (FILE *fp);

É importante que se perceba que se deve tomar o maior cuidado para não se "perder" o ponteiro do arquivo. "Perder" neste caso seria se atribuir um valor de um outro ponteiro qualquer ao ponteiro de arquivo (perdendo assim o valor original). É utilizando este ponteiro que vamos poder trabalhar com o arquivo. Se perdermos o ponteiro de um determinado arquivo não poderemos nem fechá-lo. O ponteiro fp passado à função fclose() determina o arquivo a ser fechado. A função retorna zero no caso de sucesso.


    P

Dúvidas? De uma olhadinha em nossoFAQ

Perguntas para a lista do Curso de C