lomba 0 Denunciar post Postado Janeiro 14, 2012 Oi pessoal estou com um problema na gravação e abertura de ficheiros Depois de gravar o ficheiro, quando o volto a abrir o que tinha sido escrito desaparece, ou seja fico com o ficheiro vazio. o código é o seguinte: as 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; a funcao 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; } a funcao 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),*n,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; } } lomba está offline Responder com Quote Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Janeiro 16, 2012 Esse é o problema: if((ficheiro=fopen(nome_fich,"wb"))==NULL) Leia: http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ Ao utilizar "w" no fopen(), você vai remover o conteúdo do arquivo na hora que abri-lo, ao invés de simplesmente adicionar conteúdo no fim dele. O certo então, pelo que você disse, seria isso: if((ficheiro=fopen(nome_fich,"ab"))==NULL) Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites