Per creare il puntatore ad un file in C, e per riservare l'area per il buffer di transito, si usa la dichiarazione:
FILE *pf;
dove FILE è una struttura predefinita nella libreria
stdio.h. La variabile
pf è una locazione di memoria grande quanto basta per mantenere un indirizzo di memoria. La dichiarazione riserva solo lo spazio per
pf, per scrivere l'indirizzo
del descrittore bisogna prima crearlo con l'istruzione:
pf = fopen("testo.txt", "w");
Il primo parametro della funzione
fopen è il nome del file, il secondo parametro è la modalità di accesso in scrittura.
Le modalità di accesso che si possono specificare sono:
- r (read) il file può essere solo letto, inoltre deve esistere.
- w (write) il file viene creato e reso pronto per la scrittura oppure, se esiste, il suo contenuto viene eliminato e si possono scrivere record.
- a (append) il file esiste e i record vengono aggiunti alla fine del file.
Con le modalità w, a, r+, w+ e a+ il file può essere modificato.
Dopo l'apertura bisogna verificare se l'operazione è riuscita. Infatti, se non è stato possibile aprire il file la segnalazione di errore non è automatica, ma è compito del programmatore gestire la situazione anomala.
Altrimenti il programma, continuando, non accede al file ma l'utente non se ne accorge. Quindi dopo l'apertura si deve verificare il valore del puntatore:
if (pf==NULL) {
printf("Errore");
return;
}
Per scrivere nel file si usa la funzione
fprintf:
fprintf(pf, "%s", s);
in cui:
- pf è il puntatore al file,
- "%s" è lo specificatore di formato, in questo caso stringa,
- s è il puntatore ad una stringa (un array di caratteri)
Per leggere da un file si usa la funzione
fscanf:
fscanf(pf, "%s", s);
in cui il significato dei parametri è lo stesso di
fprintf
Quando si è terminato di usare il file bisogna chiuderlo. L'operazione di chiusura corrisponde al rilascio dell'area riservata per il buffer e a quella per il descrittore.
fclose(pf)
Le due funzioni:
fgets() e
fputs() permettono rispettivamente di leggere e scrivere un file una riga alla volta, intendendo come
riga una porzione di testo che termina con il codice di fine riga.
La funzione
fgets() permette di leggere una riga di testo di una data dimensione massima. Ad esempio:
fgets (s, 100, fp);
legge una riga di testo di dimensione massima 99 caratteri, dal file rappresentato dal puntatore fp.
Questa riga viene trasferita all'interno dell'array s, con l'aggiunta del carattere \0 finale (il 100-mo carattere) di fine stringa.
La funzione
fputs() richiede solo la stringa e il puntatore del file da scrivere. Il carattere di fine stringa è già contenuto nella stringa.
fputs (s, fp);
Notare che tutte le funzioni di accesso al file richiedono che si specifichi l'indirizzo della locazione di memoria coinvolta nel trasferimento sul file.
Negli esempi precedenti si è usato il nome della stringa che è il puntatore alla stringa, ma nel caso di una variabile semplice bisogna specificare l'indirizzo della variabile,
tramite l'operatore
&.