Il 0% ha trovato utile questo documento (0 voti)
25 visualizzazioni

Files

Il documento descrive le basi della gestione dei file, inclusa l'apertura, la lettura e la scrittura di file di testo e binari. Vengono illustrate le funzioni per aprire, chiudere, leggere e scrivere file.

Caricato da

MaxMax
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
25 visualizzazioni

Files

Il documento descrive le basi della gestione dei file, inclusa l'apertura, la lettura e la scrittura di file di testo e binari. Vengono illustrate le funzioni per aprire, chiudere, leggere e scrivere file.

Caricato da

MaxMax
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 11

Gestione

Gestione dei
dei file
file
Un file e’ definito come un oggetto, presente nel file system, costituito da
una sequenza continua di bytes

Un file, per poter essere utilizzato, deve essere aperto


Successivamente e’ possibile leggere il file e/o scrivere nuovi contenuti

Dopo l’apertura, il puntatore di lettura/scrittura e’ posizionato all’inizio


del file

Il puntatore di lettura/scrittura e’ spostato in avanti a seguito di


operazioni di lettura e scrittura. Lo spostamento e’ funzione del numero
di byte letti o scritti.
1
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

File
File di
di testo
testo ee binari
binari
In funzione del tipo di contenuto di un file, distinguiamo:

•file di testo contengono caratteri stampabili e informazioni


interpretabili da un umano
•file binari contengono dati di vario genere
(mix di caratteri stampabili e non)

File di testo 48 45 4C 4C 4F 0A
‘H’ ‘E’ ‘L’ ‘L’ ‘O’ ‘\n’

File di binario 00 04 CC 36 4E FC

2
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

1
Uso
Uso dei
dei file
file (apertura/chiusura)
(apertura/chiusura)
Apertura:
FILE * fopen (char * pathname, char * mode)

pathname: percorso completo del file da aprire


mode: modalita’ di apertura
r lettura
w creazione e scrittura
r+ lettura e scrittura (file gia’ esistente)
w+ creazione, lettura e scrittura
a scrittura in “append” (alla fine del file)

b file binario (se non specificato e’ un file di testo)

Chiusura:
int fclose (FILE * f)
3
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

Uso
Uso dei
dei file
file di
di testo
testo (lettura/scrittura)
(lettura/scrittura)

Scrittura:
int fprintf (FILE *f, char * format, ...)

Lettura:
int fscanf (FILE *f, char * format, ...)

Stessa modalita’ di funzionamento di printf e scanf

4
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

2
Uso
Uso dei
dei file
file di
di testo,
testo, esempio
esempio
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
...
int i;
FILE * f;
f = fopen (“dati.txt”,”w”); // creazione e apertura in scrittura
if (f == NULL)
printf (“Errore di apertura\n”);
else {
for (i = 0;i < VECTOR_SIZE;i++)
fprintf (f, “%d\n”, dati [i]); // scrittura dei dati
fclose (f); // chiusura del file a conclusione
}
...

5
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

Uso
Uso dei
dei file
file di
di testo,
testo, esempio
esempio
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
...
int i;
FILE * f;
f = fopen (“dati.txt”,”r”); // apertura in lettura
if (f == NULL)
printf (“Errore di apertura\n”);
else {
for (i = 0;i < VECTOR_SIZE;i++)
fscanf (f, “%d”, & dati [i]); // lettura dei dati
fclose (f); // chiusura del file a conclusione
}
...

6
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

3
File
File di
di testo
testo

dati [0] = 5 File “dati.txt”


dati [1] = 10
dati [2] = 4 35 0A 31 30 0A 34 0A 34 33 0A 38 0A
dati [3] = 43 ‘5’ ‘\n’ ‘1’ ‘0’ ‘\n’ ‘4’ ‘\n’ ‘4’ ‘3’ ‘\n’ ‘8’ ‘\n’
dati [4] = 7

File “dati.txt” aperto con il


“blocco note”

7
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

Uso
Uso dei
dei file
file di
di binari
binari (lettura/scrittura)
(lettura/scrittura)
La scrittura/lettura avviene specificando il puntatore al blocco di dati da
leggere/scrivere e la dimensione dei dati da leggere/scrivere
Scrittura:
int fwrite (void * ptr, int size, int num, FILE *f)

Lettura:
int fread (void * ptr, int size, int num, FILE *f)

ptr puntatore al blocco di dati da trasferire


size dimensione di ogni blocco dati
num numero di blocchi da trasferire
f file su cui leggere/scrivere (precedentemente aperto)

valore di ritorno: numero dei blocchi trasferiti

8
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

4
Uso
Uso dei
dei file
file binari,
binari, esempio
esempio
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
...
int i;
FILE * f;
f = fopen (“dati.bin”,”wb”); // creazione e apertura in scrittura
// file binario
if (f == NULL)
printf (“Errore di apertura\n”);
else {
for (i = 0;i < VECTOR_SIZE;i++)
fwrite (& dati[i], sizeof (int), 1, f); // scrittura dei dati
fclose (f); // chiusura del file a conclusione
}
...

9
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

File
File binari
binari -- fwrite
fwrite
fwrite (& dati[i], sizeof (int), 1, f);

Puntatore all’area di memoria


che contiene i dati da trasferire
Dimensione (in byte) dei dati da
trasferire
(trasferiamo un elemento del
vettore, quindi un intero)
Numero di elementi da trasferire
(trasferiamo un solo elemento del vettore)
File su cui scrivere

Scrivere l’intero vettore


fwrite (& dati[0], sizeof (int), VECTOR_SIZE, f);
10
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

5
Uso
Uso dei
dei file
file binari,
binari, esempio
esempio
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
...
int i;
FILE * f;
f = fopen (“dati.bin”,”rb”); // apertura in lettura
// file binario
if (f == NULL)
printf (“Errore di apertura\n”);
else {
for (i = 0;i < VECTOR_SIZE;i++)
fread (& dati[i], sizeof (int), 1, f); // lettura dei dati
fclose (f); // chiusura del file a conclusione
}
...

11
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

File
File binari
binari

dati [0] = 5
dati [1] = 10
dati [2] = 4 Ogni elemento (numero intero) occupa 4 byte
dati [3] = 43
dati [4] = 7

File “dati.bin”

05 00 00 00 0A 00 00 00 04 00 00 00 2B 00 00 00

elemento 0 elemento 1 elemento 2 elemento 3

12
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

6
Gestione
Gestione dell’end-of-file
dell’end-of-file
for (i = 0;i < VECTOR_SIZE;i++) for (i = 0;i < VECTOR_SIZE;i++)
fread (& dati[i], sizeof (int), 1, f); fscanf (f, “%d”, & dati[i]);

C’e’ un loop che dice quanti elementi occorre leggere


Stiamo dunque supponendo che il numero di elementi del file sia noto a priori

Se questo numero non e’ noto, occorre leggere il file fino alla sua fine
Occorre dunque sapere quanto abbiamo raggiunto la fine del file.

La funzione:
int feof (FILE * f)
restituisce “1” se abbiamo raggiunto la fine del file f, “0” altrimenti

13
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

File
File binari:
binari: gestione
gestione dell’eof
dell’eof
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
int i;
FILE * f;
f = fopen (“dati.bin”,”rb”); // apertura in lettura
// file binario
if (f == NULL)
printf (“Errore di apertura\n”);
else {
i = 0;
while (!feof (f)) {
fread (& dati[i], sizeof (int), 1, f); // lettura dei dati
i++;
}
fclose (f); // chiusura del file a conclusione
}
...
14
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

7
File
File binari:
binari: gestione
gestione dell’eof
dell’eof–– Implementazione
Implementazione corretta
corretta
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
int i;
FILE * f;
f = fopen (“dati.bin”,”rb”); // apertura in lettura
// file binario
if (f == NULL)
printf (“Errore di apertura\n”);
else {
i = 0;
while (fread (& dati[i], sizeof (int), 1, f) == 1) { // lettura e
controllo
i++;
}
fclose (f); // chiusura del file a conclusione
}
...
15
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

File
File di
di testo:
testo: gestione
gestione dell’eof
dell’eof –– Implementazione
Implementazione corretta
corretta
#include <stdio.h>
...
...
#define VECTOR_SIZE 10
int dati[VECTOR_SIZE];
...
int i;
FILE * f;
f = fopen (“dati.bin”,”r”); // apertura in lettura
if (f == NULL)
printf (“Errore di apertura\n”);
else {
i = 0;
while (fscanf (f, “%d”,& dati[i]) == 1) { // lettura e
controllo
i++;
}
fclose (f); // chiusura del file a conclusione
}
...

16
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

8
Case-Study:
Case-Study: una
una rubrica
rubrica telefonica
telefonica

#include <stdio.h>
#include <string.h>

#define FILENAME "rubrica.bin"

typedef struct {
char cognome [40];
char nome [40];
char telefono [30];
} t_elemento_rubrica;

...

17
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

Case-Study:
Case-Study: una
una rubrica
rubrica telefonica
telefonica

...
int main (int argc, char * argv[])
{
int choice;
do {
printf ("0- Fine\n");
printf ("1- Inserisci nominativo\n");
printf ("2- Cerca nominativo\n");
scanf ("%d", &choice);
switch (choice) {
case 1: insert_name (); break;
case 2: search_name (); break;
}
} while (choice != 0);
}
...

18
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

9
Case-Study:
Case-Study: una
una rubrica
rubrica telefonica
telefonica

...
void insert_name (void)
{
t_elemento_rubrica e;
FILE * f;
printf ("Cognome :");
scanf ("%s", e.cognome);
printf ("Nome :");
scanf ("%s", e.nome);
printf ("Telefono:");
scanf ("%s", e.telefono);
f = fopen (FILENAME, "ab"); // append = apertura in scrittura alla
// fine del file
if (f == NULL)
printf ("Errore di apertura del file.\n");
else {
fwrite (&e, sizeof (t_elemento_rubrica), 1, f);
fclose (f);
}
}
...
19
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

Case-Study:
Case-Study: una
una rubrica
rubrica telefonica
telefonica
...
void search_name (void)
{
char cognome [40];
t_elemento_rubrica e;
FILE * f;
printf ("Inserisci il cognome da cercare :");
scanf ("%s", cognome);
f = fopen (FILENAME, "rb");
if (f == NULL)
printf ("Errore di apertura del file.\n");
else {
while (fread (&e, sizeof (t_elemento_rubrica), 1, f) == 1) {
if (strcmp (e.cognome, cognome) == 0) {
printf ("Cognome : %s\n", e.cognome);
printf ("Nome : %s\n", e.nome);
printf ("Telefono : %s\n", e.telefono);
}
}
fclose (f);
}
}
20
Corrado Santoro – Laboratorio di Informatica – Lezione 10 – CdS Ing. Informatica – Universita’di Catania

10
ESERCIZIO
ESERCIZIOSULLE
SULLECODE
CODE++FILES
FILES

Realizzare un sistema informatico che consenta di smistare l’accesso agli


sportelli di una “segreteria studenti”.
Si supponga la presenza di tre sportelli e si consideri la seguente operativita’:

1. Lo studente inserisce i propri dati (cognome, nome e numero di matricola)

2. Il sistema sceglie lo sportello con minor gente in fila e accoda lo studente

3. Lo studente riceve dal sistema l’informazione sul numero di sportello sul


quale egli e’ stato accodato ed il numero di persone che si trovano in coda a
quello sportello.

4. Ogni addetto allo sportello interroga il sistema per sapere il prossimo


studente da servire e per conoscere il numero di studenti in fila davanti al suo
sportello.

5. All’orario di chiusura, deve essere possibile registrare lo stato delle


code in modo da ripristinare i turni nel giorno successivo
21
Corrado Santoro – Laboratorio di Informatica – Lezione 9 – CdS Ing. Informatica – Universita’ di Catania

11

Potrebbero piacerti anche