File binari Accesso a file con record di lunghezza costante Struct Persona { Int id; Char nome[50];//nome e cognome Double stipendio; }; Persona dipendente; Apertura file binario fstream nomestream; nomestream.open(nomefile,… ios::binary) Accesso a file binario può essere 1.Sequenziale scrivere o leggere dal primo record 2.Diretto posizionamento su uno specifico record Lettura e scrittura sequenziale su file binario • nomestream.write(variabile, sizeof(variabile)); • nomestream.read(variabile, sizeof(variabile)); Fare attenzione il metodo deve ricevere un puntatore a carattere per cui si effettua un casting sul record… …… SCRITTURA • nomestream.write((char*) &variabile, sizeof(variabile)); LETTURA • nomestream.read((char*) &variabile, sizeof(variabile)); Creazione archivio dipendenti • Costruisci un creadipendenti.cpp che apre il file binario in scrittura e lo richiude • Il file fisico sarà anagrafe.dat Costruiamo ora un file inserisci dipendenti.cpp ……….. ………. //inserite tutte le librerie Struct Persona { Int id; Char nome[50]; Double stipendio; }; Persona dipendente; int main() { fstream fout; fout.open(“anagrafe.dat, ios::app | ios::binary); if (!fout) { cout<<“Error”<<endl; } else { cout<<“matricola dip(0 per finire) :”; cin>>dipendente.id; while(dipendente.id!=0) { cin.ignore(80,’\n’); cout<<“cognome e nome dip:”; cin.getline(dipendente.nome,50); cout<<“stipendio in euro:”; cin>>dipendente.stipendio; fout.write((char *) &dipendente, sizeof(dipendente)); cout<<“inserisci matricola nuovo dip (0 per finire): “; cin>>dipendente.id; } fout.close(); } elimina il carattere di terminazione. Rimuove tutti i caratteri dal buffer di input fino a quando incontra il primo carattere newline. Il numero 80 indica il numero massimo di caratteri di una riga cin.ignore(80,’\n’); cin.getline(dipendente.nome,50) gestisce gli ingressi di stringhe di caratteri che possono avere anche spazi bianchi, si indica anche il numero massimo di caratteri L’operatore >> trascura gli spazi, le tabulazioni e i caratteri di fine riga Esercizio 1 • Visualizza i dipendenti registrati Attività di progetto per il laboratorio: Le informazioni relative ai partecipanti alle gare studentesche di atletica vengono registrate in un archivio ad accesso sequenziale. 1. Costruire il file binario creaArchivioGS.cpp 2. Costruire una procedura che inserisce atleti nell’archivio 3. Costruire una procedura che stampi a video gli atleti registrati nell’archivio 4. Costruire una funzione che ci dica quanti 15enni partecipano alle gare 5. Il tutto deve prevedere un menù di scelta iterata Ricapitolando….. Metodi su file di testo e binari operazioni Metodi/operatori File di testo File binario Apertura open() . scrittura << . scrittura write() . lettura read() . lettura >> . chiusura close() . . .