|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
[C++] File binari...
Allora miei cari, ho fatto per l'università un programmino che si basa sull'uso di un file binario e di strutture... Ora il prof ci ha detto che una volta chiuso il programma, alla seconda esecuzione i dati all'interno del file sono ancora utilizzabili... ora io nell'apertura del file ho fatto
Codice:
fstream file; file.open("file.dat",ios::binary|ios::in|ios::out|ios::ate); Codice:
file.seekg(0,ios::beg); Qual'è il problema...? Cos'è che il mio prof non mi ha detto...? ![]() In definitiva il codice è questo: Codice:
#include<iostream> #include<cstdlib> #include<fstream> using namespace std; struct anagrafica{ short int giorno; short int mese; short int anno; char luogo[50]; }; struct Dati{ short nprog; char nome[30]; char cognome[50]; char telefono[12]; anagrafica fica; }; short int contatore; const int lunghezza=sizeof(Dati); short menu(); void InsertData(Dati&,fstream&); void stampatutto(Dati&,fstream&); void ricerca(Dati&,fstream&); void stampapersona(Dati&); int main(){ fstream file; file.open("file.dat",ios::in|ios::out|ios::binary); if (!file){ file.open("file.dat",ios::in|ios::out|ios::binary|ios::trunc); cout<<"File creato! Riavviare l'applicazione. "; return 0; } short scelta; Dati persona; do { scelta=menu(); if (scelta==1){ InsertData(persona,file); } if (scelta==2) stampatutto(persona,file); if (scelta==3) ricerca(persona,file); } while (scelta>0 && scelta<4); file.close(); return 0; } void stampapersona(Dati &persona){ cout<<"N° "<<persona.nprog<<endl<<persona.nome<<" "<<persona.cognome<<endl; cout<<"Nato a "<<persona.fica.luogo<<" in data "<<persona.fica.giorno<<"/"; cout<<persona.fica.mese<<"/"<<persona.fica.anno<<"\nNumero di telefono: "; cout<<persona.telefono; } short menu(){ short choice; cout<<"Inserisci la tua scelta: 1 per inserire,2 per stampare tutto, 3 per cercare un cognome: "; cin>>choice; return choice; } void InsertData (Dati &persona,fstream &file){ char ch; do { file.seekp(0,ios::end); contatore++; persona.nprog=contatore; cout<<"Inserisci nome e cognome separati da spazi: "; cin>>persona.nome>>persona.cognome; cout<<"\nInserisci ora il numero di telefono: "; cin>>persona.telefono; cout<<"\nInserisci ora la tua data di nascita nel formato gg mm aaaa"; cin>>persona.fica.giorno>>persona.fica.mese>>persona.fica.anno; cout<<"\nInserisci ora il comune di nascita"; cin>>persona.fica.luogo; cout<<"\nVuoi inserire un nuovo nominativo? y oppure n?: "; file.write((char*)&persona,lunghezza); cin>>ch; } while (ch=='y'); } void stampatutto(Dati &persona,fstream &file){ file.seekg(0,ios::beg); for (int i=0;i<contatore;i++){ file.read((char*) &persona,lunghezza); stampapersona(persona); } } void ricerca(Dati &persona,fstream &file){ file.seekg(0,ios::beg); char nomescelto[50],temp[50]; cout<<"\nInserire il cognome desiderato: "; cin>>nomescelto; for (int i=0;i<contatore;i++){ file.read((char*) &persona,lunghezza); if (strcmp(persona.cognome,nomescelto)==0) stampapersona(persona); } } ![]()
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Non sono sicuro però prova a fare un flush prima di spostarti
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
Quote:
![]()
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Fai un file.flush() prima di spostarti, non sono sicuro che sia quello il problema comunque...
Il flush serve a svuotare il buffer e a scrivere sul file. La stessa cosa avviene automaticamente quando chiudi il file |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Mar 2007
Città: 127.0.0.1
Messaggi: 23
|
Se ho capito bele il codice, è strana la cosa che fai, perchè te scrivi sul file ma leggi direttamente dalla struttura, è per quello che al riavvio del programma non trova più niente.
Daniel
__________________
Se hai un sogno, non metterlo mai al secondo posto nella lista delle cose da fare. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2003
Città: Roma / Napoli ---------------------- Vi PREGO, chiamatemi Marcello, non HarryFocker... Merci...
Messaggi: 1814
|
No in realtà leggo anche dal file... Altrimenti non potrei leggere più di una "persona"...
__________________
LOVE WILL TEAR US APART.
--- Cisco Systems CCNA Certified --- MyLastFM --- My Deviations --- Quando i 65daysofstatic si scioglieranno per problemi di droga del bassista... Io l'avevo già detto! ![]() |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Mar 2007
Città: 127.0.0.1
Messaggi: 23
|
Se fai in quel modo dovresti chiamare una funzione all'inizio che preleva i dati dal file e li ri-inserisce nelle strutture.
__________________
Se hai un sogno, non metterlo mai al secondo posto nella lista delle cose da fare. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:14.