Ficheiros Binarios

HuSa

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

Código:
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;
}
 
Última edição pelo moderador:
Algo neste malloc está mal:

Código:
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.
 
Pois a estrutura é esta
Código:
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)
 
Última edição pelo moderador:
Então o malloc será:

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

Código:
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;
 
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.
 
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?
 
Não tenho nenhum compilador à mão agora mas falta pelo menos isto:
Código:
   tal=fread([COLOR="Lime"]&[/COLOR]aux,sizeof(Restaurante), 1,fp);
 
Back
Topo