• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

20_LESI

Ler e escrever em ficheiros binários estruturas de dados

4 mensagens neste tópico

Imaginemos uma estrutura com os seguintes campos:

typedef struct aluno Aluno, *ALUNO;

struct aluno

{

  char *nome_aluno;

  unsigned long num;

  NUM_CONT cadeiras;  // lista ligada com as cadeiras do aluno

};

De notar que o nome do aluno, e a lista ligada com o número de cadeiras são campos cuja dimensão poderá variar. E esse é o grande entrave à leitura/escrita a partir de ficheiros binários. Alguém me consegue desenrascar, quer seja com exemplos semelhantes, quer seja com umas dicas, qualquer coisa, dado que tenho de processar um array de estruturas semelhantes ao que aqui deixei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o tamanho varia, regista-se o tamanho, não há volta a dar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o tamanho varia, regista-se o tamanho, não há volta a dar.

Ou seja, para cada campo que varie, tenho portanto de escrever no ficheiro o tamanho, para saber quantos bytes terei de ler, certo?

Não tens um trabalho onde faças isso? É que mesmo sabendo isso, não estou a conseguir...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca fiz isso , mas já analisei alguns formatos de ficheiros e a ideia é sempre essa, campos com a definição do tamanho (pixels de uma imagem por exemplo), campos com o offset (i.e. número de bytes que se tem que "saltar" para começar a ler a informação), etc.

Quando leres tens que saber quantas estruturas estão no ficheiro, imagina que guardas isso no início com um int, então o código inicial de leitura seria algo do género:

FILE *f;
f=fopen("filename","r");
int num;
fread(&num,sizeof(int),1,f);

E já terias na variável num o número de estruturas que tinhas de ler.

O código de escrita correspondente seria:

FILE *f;
f=fopen("filename",w);
fwrite(&num,sizeof(int),1,f); //num aqui é o tamanho do teu array de estruturas

Basicamente tens que pensar na informação que queres obter do ficheiro durante a leitura, e a partir daí deduzir de que forma é que podes colocá-la no ficheiro durante a escrita.

Ref. geral de ficheiros binários:

http://euklid.mi.uni-koeln.de/c/mirror/mickey.lcsc.edu/%257Esteve/c16.html

Ref. das funções "importantes":

http://www.cplusplus.com/reference/clibrary/cstdio/fwrite.html

http://www.cplusplus.com/reference/clibrary/cstdio/fread.html

http://www.cplusplus.com/reference/clibrary/cstdio/fseek.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora