I FILES I files sono aggregati di dati



















- Slides: 19
I FILES
I files sono aggregati di dati o istruzioni che possono essere acceduti mediante un identificatore comune. Sono memorizzati nelle memorie secondarie e gestiti dal sistema operativo. Lavoreremo con files ad accesso sequenziale (files di testo) o ad accesso casuale (files binari).
I files In C sono gestiti dalla libreria standard di IO. Il nome di un file è un puntatore alla prima posizione di memoria in cui è allocato il contenuto del file. Un puntatore a file si dichiara come: FILE * fp; Si usa come un normale puntatore.
Apertura di un file Per effettuare qualunque operazione di lettura, scrittura o modifica del contenuto di un file è necessario prima di tutto aprirlo (crearlo se non esiste). Per aprire un file in C è necessario usare l’istruzione fp=fopen(‘‘nome_file’’, ‘‘modalità’’);
Apertura di un file fp=fopen(‘‘nome_file’’, ‘‘modalità’’); fp è un puntatore al file che ci indicherà il suo inizio. Vale NULL in caso di errore di apertura. nome_file è il nome del file che deve essere indicato con l’estensione. Modalità Accesso sequenziale Codice Azione Accesso casuale Codice Azione r read (sola lettura) rb read (sola lettura) w write (sola scrittura) wb write (sola scrittura) a append (aggiunta in coda) ab append (aggiunta in coda)
Apertura di un file ATTENZIONE! fp=fopen(‘‘prova. txt’’, ‘‘w’’); Un file aperto in modalità sola scrittura • se non esiste viene creato • se esiste viene svuotato del suo contenuto file. c
Apertura di un file fp=fopen(‘‘nome_file’’, ‘‘modalità’’); Modalità Accesso sequenziale Accesso casuale Codice Azione r+ lettura e scrittura r+b lettura e scrittura w+ scrittura e lettura w+b scrittura e lettura a+ lettura e append a+b lettura e append Ogni operazione di lettura o scrittura su file incrementa di una riga la posizione dell’indicatore di posizione.
Chiusura di un file I files vengono automaticamente chiusi al termine dell’esecuzione del programma. In caso di necessità è possibile chiudere prima il file attraverso l’istruzione: fclose(puntatore_a_file); E’ bene chiudere il file quando il programma non deve può utilizzarlo.
I files ad accesso sequenziale Nei files ad accesso sequenziale i dati sono acceduti scorrendo tutti i dati finché non viene trovato il dato desiderato. Nei files ad accesso sequenziale I dati inseriti possono essere strutturati in modo diverso e quindi non si crea un sistema omogeneo di record.
I files ad accesso sequenziale La fine dei file è segnalata da EOF (End of File) che, nei diversi SO, corrisponde a diverse sequenze di caratteri. La funzione feof(puntatore_a_file); segnala la fine fisica del file e restituisce VERO (un numero diverso da 0) se il file è finito.
Scrittura file ad accesso sequenziale Dopo aver aperto il file in modalità scrittura o append, è possibile inserire dei dati attraverso la funzione fprintf(punt_a_file, “formato di controllo”, variabile); Lettura file ad accesso sequenziale Dopo aver aperto il file in modalità lettura, è possibile leggere i dati contenuti nel file attraverso la funzione fscanf(punt_a_file, “formato di controllo”, &variabile);
Lettura e scrittura file ad accesso sequenziale Esempio: main() {FILE * fp; char *nome=“Mario”; int voto = 30; if (fp=fopen(“test. txt”, w+)) {fprintf(fp, %s %d, nome, voto); rewind(fp); riporta il puntatore all’inizio del file fscanf(fp, “%s %d”, nome, &voto); } else printf(“Errore in apertura”); }
Files ad accesso casuale Nei files ad accesso casuale tutti i dati possono essere acceduti direttamente, senza dover passare dai precedenti. I files ad accesso casuale possono essere strutturati in record della stessa tipologia imponendo una struttura al file. Nei files ad accesso casuale il trasferimento dei dati, in input o output, avviene per blocchi (i record). I files ad accesso casuale vengono trattati del C in modalità binaria.
Scrittura file ad accesso casuale Dopo aver aperto il file in modalità scrittura o append, è possibile inserire dei dati attraverso la funzione fwrite(nome_blocco, dim_elem, num_elem, punt_file); Lettura file ad accesso casuale Dopo aver aperto il file in modalità lettura, è possibile leggere i dati contenuti nel file attraverso la funzione fread(nome_blocco, dim_elem, num_elem, punt_file); Passato per indirizzo
Lettura e scrittura file ad accesso casuale Le funzioni fread e fwrite restituiscono un intero che rende conto del numero di caratteri sui quali si è operato. Se questo numero è negativo significa che c’è stato un errore o si è giunti alla fine del file.
Lettura e scrittura file ad accesso casuale Esempi: char i; fread(&i, 1, 1, fp); int a[10]; fread(a, sizeof(int), 10, fp);
Alcune funzioni utili fseek(puntatore_a_file, n, inizio); Posiziona l’indicatore di posizione nel file. inizio = 0 inizio file = 1 posizione corrente = 2 fine file n = ampiezza dello spostamento in caratteri (byte). Se espressa come numero. L significa righe.
Alcune funzioni utili ftell(puntatore_a_file); Restituisce un intero corrispondente alla posizione corrente dell’indicatore di posizione nel file. Se n è negativo c’è stato un errore.
I buffer Sono aree transitorie per la registrazione temporanea di dati e sono definibili come stringhe , in genere di 512 caratteri. Possono essere usate per il travaso di dati da un file ad un altro.