View Full Version : Ficheiros Binarios


HuSa
13-06-2008, 19:31
Boas

Eu precisa-va de guardar e carregar uma estrutura de dados num ficheiro binário e depois conseguilo carregar.

A parte do gravar aparente mete funciona vem agora a parte do carregaer é que não consigo de maneira nenhuma por a funcionar.

Se alguem poder ajudar agradecia.

void GravarRestaurantes(Rest *ListaRestaurantes){ //Método que permite guarda em ficheiro binário
Rest aux;
if(ListaRestaurantes!=NULL){
FILE *fp;//ponteiro para ficheiro
fp=fopen("Restaurante","wb");//se o ficheiro nao existe, cria-o, se existe será substituido por este
if(fp!=NULL){
for(aux=*ListaRestaurantes; aux!=NULL; aux=aux->proximo){
fwrite(aux,sizeof(Restaurante), 1,fp);
}
}
fclose(fp);
printf("\nAs suas alteraçoes foram salvas em ficheiro\n");
system("pause");
}
else{
printf("A lista esta vazia\n");
system("pause");
}

}


//Função que nos permite carregar o ficheiro binario
Rest* CarregarRestaurantes(Rest *ListaRestaurantes){
printf("Carregar\n") ;
Rest aux2, ptr, *apagado;
int tal=1;
int op;
FILE *fp;
fp=fopen("Restaurante","rb");
if(ListaRestaurantes==NULL){
while(tal>0){
Rest aux=(Rest)malloc(sizeof(Rest));
tal=fread(aux,sizeof(Restaurante), 1,fp);
if (tal>0){
printf("\nNome= %s\n",aux->nome);
if(ListaRestaurantes==NULL){
*ListaRestaurantes=aux;
aux2=aux;
}
else{
aux2->proximo=aux;
aux2=aux;
}
}
}
fclose(fp);
printf("Os seus dados foram lidos do ficheiro!!\n");
}
system("pause");
return ListaRestaurantes;
}

Baderous
13-06-2008, 19:38
Algo neste malloc está mal:

Rest aux = (Rest)malloc(sizeof(Rest));

Deves fazer o casting para um apontador para Rest, e o sizeof recebe como parâmetro o nome por que é conhecida a estrutura de dados. Como não sei como estão definidas as estruturas e como no printf seguinte fazes aux->nome, não sei dizer onde está o erro.

HuSa
13-06-2008, 19:42
Pois a estrutura é esta
typedef struct Restaurante *Rest; // ponteiro para estruturas do tipo Rest
typedef struct Restaurante{ //estrutura para guardar os dados de cada Restaurante
int x, y;
char nome[25],morada[50];
char mail[30], tipo_comida[25];
char dia_descanso[20], periodo_ferias[30];
Rest proximo;
}Rest_nodo;// utilizado no sizeof(Rest_nodo)

Baderous
13-06-2008, 19:54
Então o malloc será:

Rest aux = (Rest)malloc(sizeof(Rest_nodo));PS: Podes simplificar essa declaração fazendo:

typedef struct Restaurante{
int x, y;
char nome[25],morada[50];
char mail[30], tipo_comida[25];
char dia_descanso[20], periodo_ferias[30];
struct Restaurante *proximo;
}Rest_nodo, *Rest;

HuSa
13-06-2008, 20:00
Mesmo assim não pois eu grava os dados saiu do programa e quando volta a entrar e a carregar tudo bem mas quando vou a ver os dados não me aparece nada.
Mesmo quando vou a inserir novos dados não acrescenta aos dados supostamente existentes.

HuSa
15-06-2008, 16:14
Ninguém consegue ajudar?

magikRing
17-06-2008, 22:40
Pelo que percebi carregas os dados e aparece no ecra certo? se fores ver os dados do ficheiro BIN (do ficheiro que ele criou na pasta a tua escolha) nao consegues ver porque esta encriptado. axo que e essa a duvida certo?

zgruli
19-06-2008, 23:29
Não tenho nenhum compilador à mão agora mas falta pelo menos isto:

tal=fread(&aux,sizeof(Restaurante), 1,fp);