Problema con file binario

di il
3 risposte

Problema con file binario

Ciao a tutti.
Ho trovato questo forum cercando sulla rete una soluzione al mio problema e magari qualcuno qui può aiutarmi.

Ho creato un file binario nel quale viene registrata una struttura come in questo esempio:
struct Tscheda {
        int id;
        char nome[30];
} cliente;
Il programma prevede che inserendo un nuovo cliente, venga assegnato automaticamente un ID.
Quello che non riesco a fare è leggere l'ultimo ID registrato nel file per poter assegnare al prossimo cliente l'ID successivo.
Ho provato ad usare
fseek(puntatore_file, sizeof(cliente), SEEK_END);
Usando poi fread per leggere la struttura e specialmente la variabile "cliente.id" alla quale aggiungere 1 per il prossimo cliente, ma non funziona.

Ovviamente sono alle primissime armi con C e magari questa domanda può sembrare una sciocchezza per qualcuno, ma davvero non so come fare.

Grazie a chi voglia darmi una mano.

3 Risposte

  • Re: Problema con file binario

    Ciao, anche io sono alle prime armi ma vedo se posso rendermi utile....
    I tuoi dati alla fine verranno salvati in un file, giusto?
    Se i dati immagazzinati sul file sono in una struttura simile "id - nome cliente" potresti aprire il file leggendo i due dati in un colpo solo (ovviamente salvandoli in due variabili diverse), alla fine del file tieni solo quella dell'id e la incrementi di uno...

    qualcosa del genere:
    
    int id;
    int counter_id;
    char name[30];
    
    
    file>>id;
    file>>name;
    while(!file.eof()){
      counter_id=id; //Qua assegni alla tua variabile temporanea l'id letto sul file ad ogni riga,
                         // quando  arrivi alla fine il suo valore sarà uguale all'ultimo id letto 
                         //del file
      file>>id;
      file>>name;
    }
    
    //Da qua hai il valore dell'ultimo id, puoi incrementarlo di 1 e salvarlo su file di fianco al nuovo nominativo
    
    Spero di aver capito bene quello che vuoi fare e di aver più o meno risposto!
  • Re: Problema con file binario

    Ciao Eugen e grazie per la risposta.
    Ciò che suggerisci è valido ma volevo evitare di leggere il file sequenzialmente ogni volta.
    Il file potrebbe contenere migliaia di registri e la cosa diventerebbe lenta.
    Preferivo usare fseek per puntare direttamente all'ultimo registro e leggere solo quello.
  • Re: Problema con file binario

    Senti... di norma il progressivo dovrebbe stare in un altro file
    btw:
    
    fseek(fp, (sizeof(struct Tscheda))*(-1), SEEK_END);
    fread (&i,1,sizeof(int),fp);
    
Devi accedere o registrarti per scrivere nel forum
3 risposte