Algoritmos e Programação
de Computadores
Prof. Ariel Vargas
Unicamp
Arquivos Binários
Arquivos
Arquivos Texto
Podem ser manipulados por um editor de texto comum
Os dados são gravados como caracteres de 8 bits (1
byte). Ex:
O número 12345678 ocupa 8 bytes, ou seja, 64 bits
Arquivos Binários
Dados são gravados na forma binária
Costumam ser mais compactos. Ex:
O número 12345678 ocupa 4 bytes (considerado-se uma
máquina na qual um número inteiro é representado por 32
bits)
Indicados para armazenar grandes quantidades de
valores numéricos
Arquivos binários, qual a vantagem?
Como Manipular Arquivos Binários?
Abrir um arquivo:
ponteiro_para_arquivo = fopen (nome_arquivo, modo_abertura);
Fechar um arquivo:
fclose (ponteiro_para_arquivo);
Arquivos Binários
Ex:
Int n;
fread(&n, sizeof(int), 1, f);
Ex:
Int n = 10;
fwrite(&n, sizeof(int), 1, f);
for (i=0;i<n;i++)
fwrite(&v[i],sizeof(int),1,f); //gravo o vetor posição a posição
for (i=0;i<n;i++){
fread(&v2[i],sizeof(int),1,f); //leio cada posição do vetor e armazeno em v2 na tela
printf("%d ",v2[i]) ; //imprimo cada posição de v2
}}
E daí....
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, v[20] = {0, 1, 2, 3 ,4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int v2[20];
FILE *f; //ponteiro para arquivo
int n = 20;
f = fopen ("vetor2.bin", "w+b"); //crio o arquivo para gravação e leitura
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j, m[4][5] = {0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19};
int m2[4][5];
FILE *f; //ponteiro para arquivo
int l = 4;
int c = 5;
for (i=0;i<l;i++){
for (j=0;j<c;j++)
printf("%d ",m2[i][j]); //imprimo cada posição de m2 na tela
printf("\n");
}
}
Registros
E com registros?
Registros
Exemplo leitura...:
typedef struct {
char nome[20];
float media;
}tipo_aluno;
tipo_aluno a;
tipo_aluno vet[100];
typedef struct {
char nome[20];
float media;
}tipo_aluno;
tipo_aluno a;
tipo_aluno vet[100];
Função:
fseek (ponteiro_para_arquivo, posicao_relativa, marcação);
typedef struct{
int RA;
char nome[30];
Disc matriculas[6]; //vetor do novo tipo definido Disc
float CR;
}tipo_Reg_aluno;
Exemplo fseek e registros
int main(){
FILE *f;
tipo_Reg_aluno Vet[2] = {
{12436, "Maria", {"MC102", "MA141", "F 128", "F 129"}, 0.0},
{12232, "João", {"MC202", "MA211", "F 228", "F 229"}, 0.8}
};
tipo_Reg_aluno aux;