Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema posizione nel file
Forum - C/C++ - Problema posizione nel file

Avatar
dyana (Normal User)
Newbie


Messaggi: 3
Iscritto: 21/02/2007

Segnala al moderatore
Postato alle 17:46
Mercoledì, 21/02/2007
Ciao a tutti, non uso da molto il c++ e sono incappata in un problema, ho creato un file binario nel quale metto degli oggetti con il comando fwrite(...).
Fino a quì nessun problema a quanto pare, senonchè dopo aver chiuso il file e riaperto con l'istruzione fopen(...) in modalità di lettura "r+" utilizzando la funzione fread(...) mi legge l'ultimo elemento inserito.

Ho provato con le varie funzioni "rewind(...) e fseek(...)" ma nulla.

I casi sono due, o ogni volta che scrivo su file mi sovrascrive il dato precedente (..improbabile); oppure non so come tornare all'inizio del file.

Qualcuno gentilmente mi può dare una mano?
Ciao a tutti!

PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 10:23
Giovedì, 22/02/2007
Secondo me sovrascrivi ogni volta. Come usi il fwrite()?

Ultima modifica effettuata da Reese il 22/02/2007 alle 10:24
PM Quote
Avatar
dyana (Normal User)
Newbie


Messaggi: 3
Iscritto: 21/02/2007

Segnala al moderatore
Postato alle 11:33
Giovedì, 22/02/2007
si mi sono accorta di sovrascrivere ogni volta, ora però ho un altro problema, quando lancio il loop di lettura l'utimo dato scritto me lo legge 2 volte, anche se effettivamente ho controllato il numero di volte che fa il loop in scrittura è normale.

PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 13:36
Giovedì, 22/02/2007
Beh, prova a postare un po' di sorgente, cosi' ti si puo' dire qualcosa di piu'.

PM Quote
Avatar
dyana (Normal User)
Newbie


Messaggi: 3
Iscritto: 21/02/2007

Segnala al moderatore
Postato alle 13:51
Giovedì, 22/02/2007
Dovrebbe essere così..

void banca::saveOnFile(){
      FILE *myFile;
      Persona temp;
      Persona* index = lista;  //punta al primo elemento della lista
      cout<<"\n\n "<<n<<"\n\n ";
      myFile = fopen("banca.bin", "w+b");
      while(index!=0){
         temp = *index;
         cout<<"\n*** "<<temp->getNome()<<" - SCRITTO ***";
         fwrite(&temp, sizeof(Persona),1,myFile);
         fflush(myFile);
         index=index->getNext();

      }
                                      
      fclose(myFile);
      cout<<"\n***********************************************";
      myFile = fopen("banca.bin", "r+b");
      while(!feof(myFile)){
         fread(&tempo, sizeof(Persona),1,myFile);
         cout<<"\n*** "<<tempo->getNome()<<" *** - LETTO";
         cout<<"\n*** "<<tempo->getCognome()<<" ***";
         cout<<"\n*** "<<tempo->getCodFisc()<<" ***";
         cout<<"\n*** "<<tempo->getUserId()<<" ***";
         cout<<"\n*** "<<tempo->getPwd()<<" ***";
      }
      fclose(myFile);
      getchar();
      system("cls");
   }

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:32
Domenica, 25/02/2007
visto che usi il C++ potresti usare fstream e iostream del namespace std, quindi con gli operatori le varie classi come ifstream ecc... che rendono tutto più pulito e chiaro. ;-)

PM Quote