terça-feira, 12 de abril de 2016

Arquivo bin: gerando - gravando e lendo inteiros

Flexibilidade e poder são o que penso a respeito do sistema de arquivos do C.
O C nos permite abrir arquivos binários ilegível a nós humanos, da mesma forma como abre arquivos de texto totalmente compreenssíveis.
Com certeza é bem mais  seguro criar um arquivo onde a ilegibilidade
não permite a comprensão, muito menos ainda a edição dos dados.
O tipo FILE que é um dos mais usados quando devemos declarar um
ponteiro para arquivo é o principal a nos fornecer informações precisas sobre o arquivo aberto,
e um ponteiro para arquivo é capaz de identificar um arquivo específico dentro do disco.
Fica claro que um ponteiro de arquivo é uma variável ponteiro
do tipo FILE, e somos obrigados a usá-los para ler ou escrever
arquivos em C.
A biblioteca padrão do C, stdio.h possui diversas funções
para manipulação de arquivos, porém não me sinto a vontade de comentar sobre estas funções que tomariam dezenas de linhas e fugiria do alvo principal que é apenas mostrar como criar,
abrir e lê um arquivo binário em C.

Veja abaixo uma imagem do programa em execução:



Veja abaixo  código do programa:


#include <stdio.h>
#include <conio.h>
#include <time.h>
#define tam 100
void got_color ( int tam_lin_ini, int tam_lin_fim, int tam_ini_col,
         int tam_fim_col, int a, int b ) {
     int i, e;
     if ( a >= 1 && a <= 16 ) {
         textcolor ( a );
     }
     if ( b >= 1 && b <= 16 ) {
         textbackground ( b );
     }
     for ( i = tam_lin_ini; i < tam_lin_fim; i++ ) {
         for ( e = tam_ini_col; e < tam_fim_col; e++ ) {
              gotoxy ( e, i );
              printf ( " " );
         }
     }
}
int Gera_Num_Sem_Repetidos ( ) {
     int *A;
     A = ( int* ) malloc ( tam * sizeof(int) );
     size_t i;
     int aut, j, t;
     FILE * arq;
     if ( ( arq = fopen ( "Aleatórios . bin", "wb" ) ) == NULL ) {
         textcolor ( LIGHTBLUE );
         gotoxy ( 25, 15 );
         printf ( "Não foi possível criar o arquivo!" );
         getche ( );
     }
     srand ( ( unsigned int ) time ( NULL ) );
     // srand ( time ( NULL ) );
     for ( i = 0; i < tam; i++ ) {
         do {
              t = rand ( ) % tam;
              if ( t == 0 ) {
                   t = tam;
              }
              aut = 0;
              for ( j = 0; j < tam; j++ )
                   if ( t == A [ j ] )
                        aut = 1;
              if ( aut == 0 ) {
                   A [ i ] = t;
              }
         } while ( aut == 1 );
     }
     for ( i = 0; i < tam; i++ ) {
         fwrite ( A + i, sizeof(int), 1, arq );
     }
     fclose ( arq );
     free ( A );
     return 0;
}
int main ( void ) {
     system ( "title ARQUIVO BIN : GERANDO - GRAVANDO E LENDO INTEIROS " );
     got_color ( 2, 25, 3, 79, 2, 15 ); //Moldura
     size_t i;
     Gera_Num_Sem_Repetidos ( );
     FILE * ar_q;
     if ( ( ar_q = fopen ( "Aleatórios . bin", "rb" ) ) == NULL ) {
         textcolor ( LIGHTBLUE );
         gotoxy ( 25, 15 );
         printf ( "Não foi possível abrir o arquivo!" );
         getche ( );
     }
     int num [ 100 ];
     textcolor ( LIGHTRED );
     gotoxy ( 18, 3 );
     printf ( "ARQUIVO BIN : GERANDO - GRAVANDO E LENDO INTEIROS" );
     textcolor ( LIGHTBLUE );
     gotoxy ( 25, 5 );
     printf ( "Abaixo os 100 números lidos do arquivo " );
     textcolor ( BLACK );
     gotoxy ( 17, 7 );
     for ( i = 0; i < 100; i++ )
         if ( fread ( &num, sizeof(int), 1, ar_q ) == 1 ) {
            if ( i == 10){gotoxy(17,8); }
            if ( i == 20){gotoxy(17,9); }
            if ( i == 30){gotoxy(17,10);}
            if ( i == 40){gotoxy(17,11);}
            if ( i == 50){gotoxy(17,12);}
            if ( i == 60){gotoxy(17,13);}
            if ( i == 70){gotoxy(17,14);}
            if ( i == 80){gotoxy(17,15);}
            if ( i == 90){gotoxy(17,16);}
            printf (" %3d ", *num );
        }
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 26, 18 );
     printf ( "Por: " );
     textcolor ( LIGHTBLUE );
     printf ( "Samuel Lima" );
     textcolor ( BLACK );
     gotoxy ( 26, 20 );
     printf ( "sa_sp10@hotmail.com" );
     Sleep ( 1800 );
     textcolor ( LIGHTRED );
     gotoxy ( 37, 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     fclose ( ar_q );
     return 0;
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.