File binari in C++
3^ INFORMATICO - IIS PASCAL�DIPARTIMENTO INFORMATICA
PREREQUISITI
OBIETTIVI
2
File dati (o file binari)
3
from Wikipedia
Un file binario (a volte anche semplicemente "binario"), in Informatica, è un file che può contenere qualsiasi tipo di dati, codificato in codice binario a scopo di archiviazione o utilizzo (ad esempio file documenti che contengono testo formattato). ��Molti formati di file binari contengono parti che possono essere interpretate come testo, ma si distinguono per definizione dai file di testo veri e propri: un file binario è un file che non contiene solo semplice testo.��I file binari sono solitamente concepiti come sequenze di byte: le singole cifre bit che costituiscono il file sono raggruppate in gruppi di otto. �Questi file contengono byte che devono generalmente essere interpretati in modo diverso dai caratteri: i file compilati sono un esempio (i programmatori si riferiscono spesso al codice oggetto col termine "binario"), ma si può trattare di immagini, musica, dati compressi, o di qualsiasi altro tipo.
Alcuni file binari contengono header, cioè contenitori di metadata usati dai programmi associati ai file per riconoscerne ed interpretarne il contenuto. Ad esempio, un file GIF può contenere più immagini, e gli header sono utilizzati per identificare e descrivere ciascun blocco di dati.
Accesso ai file in C++
4
primitive
Abbiamo già incontrato le primitive di accesso ai file di testo messe a disposizione dalla libreria fstream
apertura � es: f = ifstream(“miofile.txt”) // apre in lettura� f = ofstream(“miofile.txt”) // apre in scrittura, se esiste sovrascrive, se non esiste crea� f = ofstream(“miofile.txt”, ios::app) // apre in scrittura, se esiste appende, se non esiste crea�� f = ofstream(“miofile.txt”, ios::binary) // apre in scrittura in modalità binaria� f = ifstream(“miofile.txt”, ios::binary) // apre in lettura in modalità binaria
chiusura
f.close() // chiude il file�
lettura e scrittura // utilizza gli operatori << , >> e getline�
Accesso ai file in C++
5
scrivere una struct su un file binario
I file binari ci permettono di scrivere dati su file mantenendo la struttura delle struct (record)
la funzione reinterpret_cast�trasforma una serie di caratteri�nella struttura del tipo specificato��in questo caso Persona
apre un file binario�in append
Accesso ai file in C++
6
leggere una struct da file binario
La lettura è sempre “char-based”. Il cast dinamico lo trasforma in una struct di un certo tipo
la funzione reinterpret_cast�trasforma una serie di caratteri�nella struttura del tipo specificato
apre un file binario�in lettura
tipo dato del cast Persona
Accesso ai file in C++
7
struttura di una struct per file binari
Abbiamo detto che la funzione reinterpret_cast trasforma una serie di caratteri nella struttura del tipo specificato.
E’ FONDAMENTALE che ogni campo della struct abbia una dimensione DEFINITA in bytes!��Per questo motivo, se dobbiamo usare file di struct, queste devono avere campi di lunghezza definita.�Non va bene “string”, che è dinamica!
In questa struct �i primi 4 bytes sono l’intero ID, �poi altri 4 il float value,�poi altri 20 la stringa name
ESERCIZIO
8
Sia data la struct così definita:
struct Atleta {
char nome[50];
char cognome[50];
int eta;
int altezza;
float record_personale;
};
Il file atleti.dat contiene dati relativi ad un certo numero di atleti.��Scarica il file atleti.dat da qui e scrivi un programma che