Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 30
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    23

    [C++] Problema posizionamento nel file

    Ciao a tutti, sto programmando con c++ e sono incappato in un problema.

    Dovrei salvare degli oggetti dello stesso tipo in un file binario:
    - Lo apro normalmente con la fopen(...) in modalità scrittura
    - utilizzo la fwrite(...) per scriverne uno
    - riutilizzo la fwrite(...) per scriverne un altro
    - PROBLEMA:
    Quando utilizzo la fread(...) per leggere da file mi ditorna solo l'ultimo elemento scritto nel file anche se prima ho usato una rewind(...) per tornare all'inizio.

    Qualche idea?

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Credo che dovresti usare fseek
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    23
    Ho provato ma nulla, ti espongo più chiaramente il problema:

    /*considera tamp e tempo cone 2 puntatori ad oggetti*/

    FILE *myFile;
    myFile = fopen("prova.bin", "w");
    fwrite(&temp, sizeof(Persona),1,myFile);
    fflush(myFile);
    /*aggiorno temp*/
    fwrite(&temp, sizeof(Persona),1,myFile);
    // ho provato a metterla quì: rewind(myFile);
    fclose(myFile);
    //ho provato a metterla quì: rewind(myFile);

    myFile = fopen("prova.bin", "r");
    //ho provato a metterla quì rewind(myFile);
    // ho provato anche con questa fseek (myFile, 0L, SEEK_SET);
    fread(&tempo, sizeof(Persona),1,myFile);
    fclose(myFile);


    se chiedo la stampa di "tempo" mi stampa l'ultimo oggetto inserito.
    Ho provato di tutto ma non riesco, forse tu che ne sai più di me sai come venirne fuori...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Puoi inviare tutto il programma, compreso di main, per fare una prova?

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    23
    Non so come si fa; devo copiare tutti fil file ed incollarne il testo quì dentro?
    perchè c'è più di un file e non sono molto corti...
    Comunque in sostanza viste le indicazioni di prima hai qualche idea?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da jocker01
    Comunque in sostanza viste le indicazioni di prima hai qualche idea?
    No ... te le avrei scritto prima ...

    Comunque, ad esempio, quando scrivi

    /*aggiorno temp*/

    mi devo fidare ... se nel codice c'e' un errore, non lo posso vedere e non ti posso dare una soluzione .... per questo ti chiedevo *tutto* il codice ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    23
    Guarda ti metto tutto il codice della funzione:

    void prog::saveOnFile(){
    FILE *myFile;
    Persona* temp = new Persona(*lista);
    Persona* tempo;// = new Persona();
    Persona* index = lista;
    myFile = fopen("prova.bin", "a+b");
    while(index!=0){
    *temp = *index;
    cout<<"\n*** "<<temp->getNome()<<" ***";
    fwrite(&temp, sizeof(Persona),1,myFile);
    fflush(myFile);
    index=index->getNext();
    }
    fclose(myFile);
    cout<<"\n***************************************** ******";
    myFile = fopen("bprova.bin", "r+b");
    rewind(myFile);
    while(!feof(myFile)){
    fread(&tempo, sizeof(Persona),1,myFile);
    cout<<"\n*** "<<tempo->getNome()<<" *** - LETTO";
    cout<<"\n*** "<<tempo->getCognome()<<" *** - LETTO";
    cout<<"\n*** "<<tempo->getCodFisc()<<" *** - LETTO";
    cout<<"\n*** "<<tempo->getUserId()<<" *** - LETTO";
    cout<<"\n*** "<<tempo->getPwd()<<" *** - LETTO";
    }
    fclose(myFile);
    }


    All'inizio me li stampa giusti, poi quando viene lanciata la lettura da file mi stampa solo i parametri dell'ultimo, ed oltretutto una volta in più rispetto al numero di inserimenti...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Per questioni di tempo e praticita', non puoi fare uno zip e metterlo a disposizione per il test e debug ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    23
    Sinceramente non so come si fa ad allegare quì i files...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Crea uno zip e pubblicalo su qualche sito da cui posso scaricarlo ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.