Jump to content
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

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.