11 de janeiro de 2010

Arquivos em C

Uma das coisas mais interessantes em C, é a manipulação de arquivos.
A linguagem nos permite acessar arquivos que estejam gravados no disco. Para isso, precisamos adicionar a biblioteca stdio.h, é nela que estão presentes as funções para podermos fazer as operações com os arquivos. Cada arquivo que desejarmos abrir, precisaremos declarar uma estrutura FILE com um ponteiro para ela. A declaração é feita da seguinte maneira:

FILE *fp;

Onde *fp é um ponteiro para a estrutura de arquivo.

A função fopen();

Para abrirmos arquivos, utilizamos a função fopen, que funciona da seguinte forma:

fp = fopen("nome_do arquivo.txt","tipo de abertura");

A função armazenar as informações no ponteiro para arquivo, que no nosso caso é *fp. Os argumentos da função fopen são o nome do arquivo e o tipo de abertura, que veremos a seguir.

*Tipos de abertura de arquivo

"r" - Abre para leitura(o arquivo já deve estar previamente criado)

"w" - Abre para gravação.(Se o arquivo já existir, será deletado e criado novamente. Se não existir, será criado.)

"r+" - Abre para leitura e gravação.(o arquivo deve estar previamente criado, e pode ser atualizado)

"w+" - Abre para leitura e gravação.(Se o arquivo já existir, será deletado e criado novamente. Se não existir, será criado.)

"a+" - Abre para atualização e para adicionar dados no final do arquivo(No arquivo que já existe, Se não existir, será criado.)

"rb" - Abre arquivo binário para leitura. (o arquivo já deve estar previamente criado).

"wb" - Abre arquivo binário para leitura e gravação.(Se o arquivo já existir, será deletado e criado novamente. Se não existir, será criado.)

"ab" - Abre arquivo binário para gravação (Os dados serão adicionados no final do arquivo que já existe, Se não existir, será criado.)

"rb+" - Abre arquivo binário para leitura e gravação (o arquivo deve estar previamente criado, e pode ser atualizado)

"wb+" - Abre arquivo binário para leitura e gravação (Se o arquivo já existir, será deletado e criado novamente. Se não existir, será criado.)

"ab+" - Abre arquivo binário para atualização (Os dados serão adicionados no final do arquivo que já existe, Se não existir, será criado.)

Lendo e escrevendo no arquivo

Para ler e escrever em arquivos, as funções mais comumente utilizadas são fscanf e fprintf. Elas se assemelham muito com as funções printf e scanf, porém como primeiro argumento temos que colocar o ponteiro para arquivo.

exemplos:
fprintf(ponteiro_para_arquivo,"Hi ppl!");

fscanf(ponteiro_para_arquivo,"%d", &variavel_int);

Posicionando o arquivo

Outro tópico importante é o posicionamento do arquivo. Por exemplo, se estamos escrevendo no arquivo e desejamos voltar para o seu início? Para isso existe a função fseek, que é usada da seguinte forma:

fseek (ponteiro_para_arquivo , offset , origem );

Onde offset é o número de bytes de deslocamento da origem, e origem é a posição onde o deslocamento é adicionado, onde temos as seguintes constantes:

SEEK_SET Início do arquivo
SEEK_CUR Posição atual do ponteiro para arquivo
SEEK_END Fim do arquivo

Fechando o arquivo

Quando acabarmos de fazer as operações com arquivos, precisamos fechá-lo, para isso é só usarmos a função fclose, que funciona da seguinte forma:

fclose(fp);

Onde fp é o ponteiro para arquivo.

Abaixo vai um exemplo completo:
#include <stdio.h>

int main()
{
    /*Variável que utilizaremos para ler do arquivo*/
    char ch[256];
    /*Declaração do ponteiro para arquivo*/
    FILE *fp;

    /*abre arquivo para leitura e gravação*/
    if((fp = fopen("arquivo.txt","w+")) != NULL)
    {
        /*Imprime na tela se o arquivo foi criado com sucesso*/
        printf("Arquivo criado com sucesso!\n");

        /*escrevendo no arquivo*/
        fprintf(fp,"Hi ppl!");

        /*reposicionando o arquivo para o início*/
        fseek(fp,0,SEEK_SET);

        /*Lendo o arquivo até o final*/
        while(fscanf(fp,"%s",ch) != EOF)
        {
            printf("%s ",ch);
        }
    }
    else
    {
        /*Se não conseguir criar o arquivo*/
        printf("Nao foi possivel criar o arquivo!");
    }

    fclose(fp);
    return 0;
}
Bom, esperam que tenham gostado, até a próxima :)

Um comentário:

  1. Vc tem os programas em C++? Tem como enviar para mim?
    joseassis1993[a]gmail.com , vlw!

    ResponderExcluir