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;
Scarica

0.1 i file