Files in C++ Motivazioni • Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) • il programma in esecuzione scrive (sequenzialmente) una sequenza di caratteri sullo schermo (o stampante) Problema: – I dati in ingresso e i risultati prodotti sono "volatili“ – si potrebbe voler conservare i risultati prodotti (per usi futuri) – si potrebbe voler conservare i dati in ingresso (per poterli riutilizzare in una nuova esecuzione, .) File • Un File è "insieme di dati" organizzati secondo una certa struttura, identificato da un nome, e memorizzato in memoria secondaria I tipi di files gestiti dal C++ sono: • File di testo (text file) inform. lette e scritte come caratteri (archivi con record a lunghezza variabile) • File binario (binary file) dati rappresentati secondo il formato interno della macchina. (archivi con record a lunghezza fissa) • file di caratteri: – costruito dall'utente usando un editore di testi – prodotto da un programma in esecuzione (p.es. risultati di un programma C++) Esempio di file •esempio già noto: il file che contiene il testo di un programma C++ int<spazio>main()<eoln> {<eoln> <tab>char<spazio>ch;<eoln> <tab>ch=’X’;<eoln> <tab>cout<spazio><<<spazio>ch;<eoln> }<eoln> <eof> Operazioni sui files • Apertura si crea un collegamento tra la memoria centrale e il file che risiede sulla m. di massa •Lettura copia in memoria centrale i dati del file che si trovano nella m. di massa •Consultazione reperimento delle informazioni •Scrittura trasferimento nella memoria di massa dei dati che si trovano sulla m. centrale •Chiusura interrompe il collegamento tra m. centrale e memoria di massa Files in C++: dichiarazione Gestione dell'ingresso/uscita su file in un programma C++: • (1) includere la libreria <fstream> • (2) dichiarare (una o più) variabili di "tipo file“ (es. fstream file_dati; ) • tipi consentiti: – ifstream: variabile file di sola lettura – ofstream: variabile file di sola scrittura – fstream: variabile file di lettura/scrittura • (3) associare una variabile di tipo file a un oggetto di tipo file (tramite la funzione open()) (es. file_dati.open(“c:\Dati00.txt”); Lettura e scrittura in un file di testo •Scrittura su file (Output) •Lettura da file (Input) •Scrittura in coda ad un file (Append) Gestione di un file di testo 1. Creazione di un archivio con i nomi degli amici Il file fisico sarà “amici.dat” 2. Lettura del contenuto del file e stampa a video delle informazioni 3. Aggiunta di dati nel file esistente “amici.dat” in coda in modalità append 1. Creazione del file //creaamici.cpp: Creazione Archivio #include <iostream> #include <fstream> #include <string> using namespace std; int main() { string nome; ofstream fout(“amici.dat”);// apertura in scrittura del file cout<<“Inserisci i nomi:”<<endl; cout<<“uno per riga(Ctr+Z per term)”<<end; while(cin>>nome) { fout<<nome<<endl; //scrive su file } fout.close(); //chiude file Return 0; } 2. Lettura del file creato //leggiamici.cpp: lettura del file creato e visualizzazione a video #include <iostream> #include <fstream> #include <string> using namespace std; int main() {string nome; ifstream fin(“amici.dat”);// apertura del file in lettura while(fin>>nome)//legge dal file fino alla fine { cout<<nome<<endl; //scrive a video nome } fin.close(); //chiude file Return 0; } 3. Aggiunta di dati nel file esistente //aggiungiamici.cpp: aggiunta di nuovi nomi #include <iostream> #include <fstream> #include <string> using namespace std; int main() {string nome; ofstream fout(“amici.dat”, ios::app);// apertura del file in append cout<<“Inserisci nuovi nomi:”<<endl; cout<<“uno per riga(Ctr+Z per term)”<<end; while(cin>>nome) { fout<<nome<<endl; //scrive su file } fout.close(); //chiude file Return 0;