Scrittura in un file di record in modalità append

di il
4 risposte

Scrittura in un file di record in modalità append

Salve a tutti . Il mio problema è il seguente: devo scrivere record in un file di record senza perdere i record già scritti. Mi risulta che la modalità app (append ) sia quella che garantisce l'apertura del file senza cancellare il suo contenuto. Solo che il codice seguente cancella il contenuto del file pur utilizzando la modalità app. Ho commesso qualche errore? Grazie per l'eventuale risposta.

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct t_prod {
   char cod[15]; 
   char desc[15];
   float prezzo;
};
int main(){
   ofstream prodotti;
   t_prod prod;
   char risp;
   prodotti.open("prodotti.dat",ios::out|ios::app|ios::binary);
   do{
     cout<<"Codice:";
     cin>>prod.cod;  
     cout<<"Descrizione:";
     cin>>prod.desc;  
     cout<<"Prezzo:";
     cin>>prod.prezzo;
     prodotti.write((char *)&prod, sizeof (prod));  
     cout<<"Continui ?:";
     cin>>risp; 
   }   
   while (risp=='s'); 
   prodotti.close(); 
 }

4 Risposte

  • Re: Scrittura in un file di record in modalità append

    Il codice funziona regolarmente. Forse stai facendo qualche altro errore (sicuro di controllare il file giusto?)

    P.S. Il codice va inserito nel forum usando i tag CODE

  • Re: Scrittura in un file di record in modalità append

    Dove si trova il tag CODE?

    Dettaglio meglio le operazioni.

    Carico 2 record con il codice precedente. Termino l'esecuzione del programma. Rilancio il programma e carico altri 3 record. termino il programma. Mando in esecuzione il codice seguente (lettura), mi visualizza gli ultime tre, i primi due sono spariti.

    Il file lo leggo con il seguente codice:

    #include <iostream>
    #include <string>
    #include <fstream>  
    using namespace std;
    struct t_prod {
    char cod[15];
    char desc[15];
    float prezzo;

    };
    int main(){
     fstream prodotti;  //dichiaro una variabile di tipo file
     t_prod prod; 
     prodotti.open("prodotti.dat", ios::in|ios::binary); 
     if (!prodotti)
        cout<<"Errore di apertura del file";
     else {
       prodotti.read((char *)&prod, sizeof (prod));
       while (!prodotti.eof()){              
             cout<<prod.cod<<"  "<<prod.desc<<"  "<<prod.prezzo<<endl;
             prodotti.read((char *)&prod, sizeof (prod));  
         }
       }  
    prodotti.close(); 
    }

  • Re: Scrittura in un file di record in modalità append

    Anche facendo come dici tu non ho problemi né in lettura né in scrittura.

    Prova a cancellare il file dei dati e a riprovare.

    Con cosa stai lavorando? Come compili?

    P.S. Meno male che ti avevo detto di postare il codice tra tag CODE

  • Re: Scrittura in un file di record in modalità append

    Ho cancellato il file e  tutto funziona regolarmente. Grazie.

Devi accedere o registrarti per scrivere nel forum
4 risposte