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

Sign in to follow this  
20_LESI

Ler e escrever em ficheiros binários estruturas de dados

Recommended Posts

20_LESI

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.

Share this post


Link to post
Share on other sites
pedrosorio

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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites
20_LESI

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...

Share this post


Link to post
Share on other sites
pedrosorio

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


Não respondo a dúvidas por mensagem.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.