1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ficheiros Binarios

Discussão em 'Programação' iniciada por HuSa, 13 de Junho de 2008. (Respostas: 7; Visualizações: 981)

  1. HuSa

    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: 13 de Junho de 2008
  2. Baderous

    Baderous Banido

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

    HuSa Power Member

    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: 13 de Junho de 2008
  4. Baderous

    Baderous Banido

    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;
     
  5. HuSa

    HuSa Power Member

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

    HuSa Power Member

    Ninguém consegue ajudar?
     
  7. magikRing

    magikRing Power Member

    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?
     
  8. zgruli

    zgruli Power Member

    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);
    
     

Partilhar esta Página