C: mi sovrascrive su altri dati

Messaggioda prime_number » 10/07/2006, 13:29

devo salvare dei dati in un file... Se l'utente chiede di non sovrascrivere invio il putnatore alla fine del file, ma alla fine in realtà mi sovrascrive. Vedete il problema voi?
Grazie!

Paola
Codice:
if ((fileout=fopen(file, "r"))!=NULL)           
 label:
  printf("\nIl file non è vuoto. Sovrascrivere? (y/n)");
  scanf(" %c", &risposta);
  fileout=fopen(file,"w");                   
  if (risposta=='y')
  fseek(fileout, 0, SEEK_SET);
  else
  {if (risposta=='n')
    {
     fseek(fileout, 0, SEEK_END);
     
    }
 
    if(risposta!='n' && risposta!='y')
    {
    printf("\nErrore!\n");
    goto label;
    }
   
  }
[/code]
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 453 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Messaggioda lorven » 10/07/2006, 13:48

Cambia modalità della open in w+ o r+ invece di w, che sovrascrive comunque.

:-)
Un giorno senza sorriso è un giorno perso.
Charlie Chaplin
Avatar utente
lorven
Junior Member
Junior Member
 
Messaggio: 176 di 369
Iscritto il: 06/12/2005, 20:55

Messaggioda prime_number » 10/07/2006, 14:05

Non pare essere quello il problema! Ho cambiato in r+ e w+ entrambi ma sovrascrive di nuovo.. eppure nn mi pare ci sia un errore nel codice!

Paola
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 454 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Messaggioda lorven » 10/07/2006, 14:05

Dimenticavo: non credo si possa aprire nuovamente lo stesso file, se non dopo averlo chiuso. E si potrebbe usare anche la modalità di apertura in append, "a"

:-)
Un giorno senza sorriso è un giorno perso.
Charlie Chaplin
Avatar utente
lorven
Junior Member
Junior Member
 
Messaggio: 177 di 369
Iscritto il: 06/12/2005, 20:55

Messaggioda prime_number » 10/07/2006, 14:09

Quindi dopo averlo aperto in modalità read dovrei chiuderlo e riaprirlo in modalità write+? Cos'è la modalità append? cosa farebbe così?
Grazie!!
Paola
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 455 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Messaggioda lorven » 10/07/2006, 14:13

Esatto, prima di riaprire un file è necessario chiuderlo.
La modalità di apertura in append consente di "appendere", cioè aggiungere alla fine, altri dati al file, senza quindi dover usare la fseek.

:-)
Un giorno senza sorriso è un giorno perso.
Charlie Chaplin
Avatar utente
lorven
Junior Member
Junior Member
 
Messaggio: 178 di 369
Iscritto il: 06/12/2005, 20:55

Messaggioda prime_number » 10/07/2006, 14:27

ah interessante!! la provo subito!!! saperlo prima, mi sarebbe stata utile in altre situazioni!! Ti so dire se ho problemi, grazie!!

Paola
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 456 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Messaggioda prime_number » 10/07/2006, 14:33

come non detto!! ho provato sia con la modalità append senza chiudere il file, sia chiudendolo, sia in w+ chiudendo prima il file!! :S

Lancio un'ipotesi: non è che fseek posso usarlo solo in modalità read? è forse per quello che non me lo invia alla fine del file?

paola
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 457 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Messaggioda groucho » 10/07/2006, 14:35

no è tecnicamente esatto che bisogna per forza chiudere un file prima di riaprirlo...

Codice:
FILE * freopen (const char * filename , const char * mode , FILE * stream);


altrimenti che l'hanno messa a fare questa funzione? :wink:

Codice:
int exit=0;

if ((fileout=fopen(file, "r"))!=NULL)           
    while (exit==0) {
        printf("\nIl file non è vuoto. Sovrascrivere? (y/n)");
        scanf(" %c", &risposta);
        if (risposta != 'n' || risposta != 'y') {
            printf("ERRORE: risposta errata, prego inserire o "y" o "n" come risposta...\n\n");
            continue;
        }
        freopen(file, (risposta=='n') ? "a+" : (risposta=='y') ? "w+" : "r+", fileout);
        exit=1;
    }
}


l'ho scritta un po' veloce senza ricontrollare o provare a compilare... se non dovesse funzionare dimmelo che la riscrivo ^^
Avatar utente
groucho
Starting Member
Starting Member
 
Messaggio: 13 di 16
Iscritto il: 27/06/2006, 22:17

Messaggioda prime_number » 10/07/2006, 14:42

Grazie mille! In realtà ho provato a cercare la funzione reopen che mi hai dato tu in internet e ho visto che esiste la modalità a+ che legge e scrive su file (e crea il file se non esiste). E' perfetta, cosaì non devo riaprire e chiudere!! ho provato e va!

Vi ringrazio!

Paola
www.greedy-bear.com : il mio blog di cucina italiana e finlandese.
Avatar utente
prime_number
Cannot live without
Cannot live without
 
Messaggio: 458 di 6148
Iscritto il: 17/09/2004, 14:20
Località: Helsinki

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite