Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

lomba

Problemas em abertura e gravação de ficheiros

Mensagens Recomendadas

lomba    0
lomba

Boas pessoal.

Estou com um problema; se me poderem ajudar num programa para a escola.

Não estou a conseguir abrir o ficheiro gravado.

Não sei se o problema está na gravação do ficheiro, ou na leitura do ficheiro.

Aqui fica as partes do código onde estou a ter problemas.

Estruturas

typedef struct movel{char designacao[25],marca[25];float potencia,hsimples,hvazio,hfvazio;int quantidade; }ELETRO;
struct home{char nome[25]; int tam;ELETRO *domestico;};
typedef struct home DIVISAO;

gravar ficheiro

DIVISAO* gravar_ficheiro(char *op,DIVISAO *zona, int *n, int *v,int *k, int *s, char *b,char *nome_fich)
{
   FILE *ficheiro;      int z, i;

   printf("\t\t\t  ***** Gravar ficheiro *****\nQual o nome do ficheiro?");
       maiusculas_pesquisa(zona,v,k,s,b);
       strcpy(nome_fich,b);
       if((ficheiro=fopen(nome_fich,"wb"))==NULL)
           printf("\nNao foi possivel abrir ficheiro");
       fwrite(n,sizeof(int),*n,ficheiro);
       fwrite(zona,sizeof(DIVISAO),*n,ficheiro);
       for(i=0;i<*n;i++)
       {
           fwrite(&zona[i].tam,sizeof(int),zona[i].tam,ficheiro);
           fwrite(zona[i].domestico,sizeof(ELETRO),zona[i].tam,ficheiro);
       }
       z=fclose(ficheiro);
       if(z!=0)
           puts("\nProblemas na gravação do ficheiro");
       getch();
   }
       return zona;
}

abrir ficheiro

DIVISAO * abrir_ficheiro( DIVISAO *zona, int *n, int *v, int *k, int *s, char *b, char *nome_fich)
{
   FILE *ficheiro;     int z, i;

   printf("\t\t\t  ***** Abrir ficheiro *****\nQual o nome do ficheiro?");
   maiusculas_pesquisa(zona,v,k,s,b);
   strcpy(nome_fich,b);
   if((ficheiro=fopen(nome_fich,"rb"))==NULL)
   {
        puts("\nImpossivel abrir o ficheiro");
        getch();
   }
   else
   {
       fread(n,sizeof(int),1,ficheiro);
       fread(zona,sizeof(DIVISAO),*n,ficheiro);
       for(i=0;i<*n;i++)
       {
           fread(&zona[i].tam,sizeof(int),zona[i].tam,ficheiro);
           fread(zona[i].domestico,sizeof(ELETRO),zona[i].tam,ficheiro);
       }
       z=fclose(ficheiro);
       if(z!=0)
           puts("\nProblemas na fecho do ficheiro");
        getch();
       return zona;
   }
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

DIVISAO* gravar_ficheiro(char *op,DIVISAO *zona, int *n, int *v,int *k, int *s, char *b,char *nome_fich)
{
        fwrite(n,sizeof(int),*n,ficheiro);
}

DIVISAO * abrir_ficheiro( DIVISAO *zona, int *n, int *v, int *k, int *s, char *b, char *nome_fich)
{
        fread(n,sizeof(int),1,ficheiro);
}

Na função gravar() gravas *n elementos; na função abrir_ficheiro() lês 1 elemento.

Alguma coisa não bate certo.

Sugestão: arranja uns nomes melhores para os parametros e variáveis em geral.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
lomba    0
lomba

Aalteração já consigo entrar no ficheiro só que os dados escritos na gravação não aparecem.

Em relação aos caracteres, sim tenho que os alterar.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade