• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

PlasticFX

escrever em ficheiro

8 mensagens neste tópico

Boas,

o meu problema é o seguinte.. tenho uma estrutura..

depois posso inserir dados no array q quero.. de motas, carros ou camioes ( dado q é 1 projecto do dakar).

depois quero gravar a informacao e isto dame erro..

aqui ta o codigo para gravar:

void EscreverFicheiro(veiculos *arrayFicheiro, int i, char nomeficha) {

     FILE *fp;
         fp = fopen (nomeficha,"wt");
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fprintf (fp, "%d \n", arrayFicheiro[i].numero);
     fprintf (fp, "%s \n", arrayFicheiro[i].piloto);
     fprintf (fp, "%s \n", arrayFicheiro[i].equipa);
     fprintf (fp, "%s \n", arrayFicheiro[i].marca);
 fprintf (fp, "%s \n", arrayFicheiro[i].modelo);
     fprintf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fprintf (fp, "%s \n", arrayFicheiro[i].assistente);
 fprintf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fprintf (fp, "%s \n", arrayFicheiro[i].classificacao);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh1);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm1);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss1);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh2);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm2);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss2);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

ao chamar a funcao na saida do programa.. ele dá erro.. um debug qualquer.. logo nao estou a ver qual poderá ser o problema..

alguem pode verificar se tou a fazer algo mal na funcao? pq o programa corre todo.. da é erro ao sair..

tou a chamar a funcao da seguinte maneira: EscreverFicheiro(Motas,250,"motas.dat");

pois quero gravar os dados apenas das motas no fixeiro motas.dat.

se me puderem ajudar.. é q tenho q entregar isto amanha :P

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

void EscreverFicheiro(veiculos *arrayFicheiro, int i, char nomeficha[20]) {

A variável nomeficheiro não tinha tamanho, sendo uma string é melhor alocar espaço. :P

Já agora porque abres o ficheiro na forma wt? Não conheço esse tipo...  :hmm:

Mas não encontrei mais nenhum erro no código. ..

PS: Da próxima utiliza o GeSHi para identar o código. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entao em q forma mais facil devo guardar?

pq depois terei q ter outra funcao para puder abrir o fixeiro no inicio do programa.. para fazer load aos dados, coisa q tambem nao sei o q usar ( wt, ou outro).

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kual é o erro k o compilador da?

se o array é um apontador para uma estrutura, entao tens k aceder aos campos dessa mesma estrutura com ->, ou entao mudas no parametro da função e nao metes o *(mas depois tens k ter em atenção o k mandas para a função).  O fopen recebe como parametro um apontador para um cadeia de caracteres (string) que é o nome do ficheiro.  por isso é char * nomeficha

mas convém mostrares o erro do compilador...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema é q ao correr, ele da um erro qualquer.. ( com o visual studio.. nao é na propria zona de erros..). aparece 1 quadrado.. pa selecionar q debugger kero usar :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o q axo mais engracado.. ao salvar apenas uns dados poukissimos.. guardame um fixeiro com 80 e tal MB.. muito estranho penso eu nao?

void EscreverFicheiro(veiculos *arrayFicheiro, int i, char *nomeficha[20]) { 

     FILE *fp;
         fp = fopen (nomeficha,"wt"); // o wt faz w->write t-> em texto
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fprintf (fp, "%d \n", arrayFicheiro[i].numero);
     fprintf (fp, "%s \n", arrayFicheiro[i].piloto);
     fprintf (fp, "%s \n", arrayFicheiro[i].equipa);
     fprintf (fp, "%s \n", arrayFicheiro[i].marca);
 fprintf (fp, "%s \n", arrayFicheiro[i].modelo);
     fprintf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fprintf (fp, "%s \n", arrayFicheiro[i].assistente);
 fprintf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fprintf (fp, "%d \n", arrayFicheiro[i].classificacao);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh1);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm1);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss1);
 fprintf (fp, "%d \n", arrayFicheiro[i].hh2);
 fprintf (fp, "%d \n", arrayFicheiro[i].mm2);
 fprintf (fp, "%d \n", arrayFicheiro[i].ss2);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fprintf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

ao gravar dados inseridos..nem q seja 1 dado apenas, fica a 86mb +/-..

depois tenho outra funcao.. para fazer "load".. q é esta:

void LerFicheiro(veiculos *arrayFicheiro, int i, char *nomeficha[20]) {

     FILE *fp;
         fp = fopen (nomeficha,"rt");
         if (fp == NULL) {
		 printf("Erro na abertura de %s",nomeficha);
         getch();
         exit(1); }
     for (i=0; i<250; i++) {
     fscanf (fp, "%d \n", arrayFicheiro[i].numero);
     fscanf (fp, "%s \n", arrayFicheiro[i].piloto);
     fscanf (fp, "%s \n", arrayFicheiro[i].equipa);
     fscanf (fp, "%s \n", arrayFicheiro[i].marca);
 fscanf (fp, "%s \n", arrayFicheiro[i].modelo);
     fscanf (fp, "%s \n", arrayFicheiro[i].copiloto);
 fscanf (fp, "%s \n", arrayFicheiro[i].assistente);
 fscanf (fp, "%s \n", arrayFicheiro[i].nacionalidade);
 fscanf (fp, "%s \n", arrayFicheiro[i].classificacao);
 fscanf (fp, "%d \n", arrayFicheiro[i].hh1);
 fscanf (fp, "%d \n", arrayFicheiro[i].mm1);
 fscanf (fp, "%d \n", arrayFicheiro[i].ss1);
 fscanf (fp, "%d \n", arrayFicheiro[i].hh2);
 fscanf (fp, "%d \n", arrayFicheiro[i].mm2);
 fscanf (fp, "%d \n", arrayFicheiro[i].ss2);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalHH);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalMM);
 fscanf (fp, "%d \n", arrayFicheiro[i].finalSS);
 }
     fclose(fp);
}

q depois apareceme 1 janela de debugger..nao consegue ler o fixeiro..

caso eu nao tenha o fixeiro criado, ele diz q nao consegue ler o fixeiro.. se ta criado la com os 86mb atrofia-se..

depois apaguei tudo o q tava dentro do motas.dat e ele consegue correr a funcao para fazer load ao fixeiro.. nao é mto estranho?

se me conseguissem ajudar agradecia :P

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isto é um vector de strings: char *nomeficha[20]

fazes char *nomeficha  ou  char nomeficha[20]

o "i" que entra como parametro na função é o ke?

tas a fazer um ciclo ate 250....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tou tramado mesmo com isto.. n consigo por isto decentemente..

tenho 1 array pa motas, outro pa carros e outro pa camioes..

depois keria gravar cada coisa no seu sitio..

tenho esta cena feita.. meto a correr.. etc.. e dps gravame cenas de 86mb.. nao sei mesmo o q sera.. mto estranho :P

0

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