Manipulação de arquivo binário em c

Cinthia Mikaela de Souza

Escrita em arquivo

Para escrever em um arquivo binário utiliza-se a função fwrite(). 

A função fwrite() escreve um bloco de dados em um arquivo .bin,  para isso, esta

função deve receber os seguintes parâmetros.


int fwrite ( void *dados , int tamanho_do_elemento , int num_elementos , FILE * fluxo );


Leitura de arquivo

Para ler o conteúdo de um arquivo binário utiliza-se a função fread().

A função fread() lê um bloco de dados de um arquivo .bin, para isso,  ela

 deve receber os seguintes parâmetros.


int fread ( void *dados , int tamanho_do_elemento , int num_elementos , FILE * fluxo );


A seguir serão mostrados alguns exemplos utilizando as funções

mencionadas anteriormente. Teste os códigos!

Assim, voçê irá compreender melhor o conteúdo abordado.



O programa abaixo escreve e lê uma string de um arquivo binário.

# include <stdio.h>
# include <stdlib.h>

int main ()
{
    FILE *arq;
    char nome[100] = {"Xulambis"};

     // Abre arquivo binario para escrita
    if (( arq = fopen ("arquivo.bin","wb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }
    // Escreve a variavel nome
    if( fwrite (&nome, sizeof ( char ),1,arq) != 1)
        printf (" Erro na escrita do arquivo ");
    // Fecha o arquivo
    fclose (arq);

     // Abre o arquivo novamente para leitura
    if (( arq = fopen ("arquivo.bin", "rb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }
    // Le em nome o valor da variavel armazenada anteriormente
    if( fread (&nome, sizeof (char), 1,arq) != 1)
        printf (" Erro na leitura do arquivo ");

    printf ("\nO valor de nome eh : %s",nome );
    fclose (arq);
    return 0;
}


O programa abaixo grava 100 números em um arquivo,

após isso, ele lê e imprime estes valores.


# include <stdio.h>
# include <stdlib.h>
int main ()
{
    FILE *arq;
    int num[100];

    for(int i=0;i<100;i++){
        num[i]= i+1;
    }

     // Abre arquivo binario para escrita
    if (( arq = fopen ("arquivo.bin","wb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }
    // Escreve a variavel num[]
    if( fwrite (&num, sizeof ( int ),100,arq) != 1)
        printf (" Erro na escrita do arquivo ");
    // Fecha o arquivo
    fclose (arq);

     // Abre o arquivo novamente para leitura
    if (( arq = fopen ("arquivo.bin", "rb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }
    // Le em num[] o valor da variavel armazenada anteriormente
    if( fread (&num, sizeof (int), 100,arq) != 1)
        printf (" Erro na leitura do arquivo ");

        printf("\n");

    for(int i=0;i<100;i++){
        printf("%i\n",num[i]);
    }
    fclose (arq);
    return 0;
}


Gravando dados de uma estrutura em um arquivo binário.


# include <stdio.h>
# include <stdlib.h>

struct Aluno{

char nome[100];
int  matricula;
int nota;

};

int main ()
{
    FILE *arq;
    Aluno aluno;
    Aluno *ptr = &aluno;

        printf("\n Nome do aluno:");
        scanf("%s",&ptr->nome);
        printf("\n Matricula: ");
        scanf("%i",&ptr->matricula);
        printf("\n Nota: ");
        scanf("%i",&ptr->nota);

     // Abre arquivo binario para escrita
    if (( arq = fopen ("arquivo.bin","wb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }

    if( fwrite (&aluno, sizeof (Aluno ),1,arq) != 1)
        printf (" Erro na escrita do arquivo ");
    // Fecha o arquivo
    fclose (arq);

}


fragmento de código widget

Lendo dados de um arquivo binário.


# include <stdio.h>
# include <stdlib.h>

struct Aluno{

char nome[100];
int  matricula;
int nota;

};

int main(){

    FILE *arq;
    Aluno aluno;
    Aluno *ptr = &aluno;

     // Abre o arquivo para leitura
    if (( arq = fopen ("arquivo.bin", "rb")) == NULL )
    {
        printf (" Erro na abertura do arquivo ");
        exit (1) ;
    }

    if( fread (&aluno, sizeof (Aluno), 1,arq) != 1)
        printf (" Erro na leitura do arquivo ");

        printf("\n");

        printf("\n Nome: %s",ptr->nome);
        printf("\n Matricula: %i ",ptr->matricula);
        printf("\n Nota: %i",ptr->nota);


    fclose (arq);
    return 0;
}


fragmento de código widget

Fim!


Voltar