Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lomba

Abertura e gravacao de ficheiros (files)

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.