nikpez
Ominide
4 min. di lettura
Vota 4 / 5

Concetti Chiave

  • Il cursore del file si posiziona all'inizio per la lettura e avanza automaticamente dopo ogni operazione di lettura o scrittura.
  • La funzione fopen() apre i file con modalità specifiche: lettura ("r"), scrittura ("w"), aggiunta ("a"), con varianti per file binari ("b") e di testo ("t").
  • La funzione fclose() chiude un file, svuota i buffer e restituisce 0 se ha successo o EOF se fallisce.
  • La funzione feof() verifica se è stata raggiunta la fine del file, restituendo un valore logico differente per vero o falso.
  • Le funzioni fread() e fwrite() gestiscono la lettura e la scrittura di file binari, restituendo il numero di record effettivamente processati.
Gestione dei file in C

Possiamo immaginare che al momento dell’apertura del file venga predisposto un cursore che segna il punto di accesso all’interno del file (un dato del file viene letto, o un dato viene scritto nel file, in corrispondenza della posizione di tale cursore).
Quando un file viene aperto in lettura, il cursore si posiziona all’inizio del file; quando un dato viene letto il cursore passa automaticamente alla posizione successiva: la prossima lettura legge il dato successivo … .
Idem per la scrittura.

Apertura di un file
FILE * fopen(const char * name, const char * mode);
dove:
name: è una stringa che rappresenta il nome (assoluto o relativo) del file
nel File System.
mode: esprime la modalità di accesso scelta
“r”, in lettura (read)
“w”, in scrittura (write)
“a”, scrittura, aggiunta in fondo (append)
“b”, a fianco ad una delle precedenti, indica che il file è binario
“t”, a fianco di una delle precedenti, indica che il file è di testo
Se eseguita con successo, l’operazione di apertura ritorna come risultato un puntatore a FILE (associato al file aperto).
Se, invece, l’apertura fallisce (ad esempio perché il file non esiste), fopen() restituisce il valore NULL.

Apertura in lettura
fp = fopen(“studenti.dat”,”rb”);
Apertura in scrittura
fp = fopen(“studenti.dat”,”wb”);
Apertura in aggiunta (append)
fp = fopen(“studenti.dat”,”ab”);

Chiusura di un file
Al termine di una sessione di accesso al file, esso deve essere chiuso.
L’operazione di chiusura si realizza con la funzione fclose():
int fclose(FILE *stream); //dove stream è il file da chiudere fclose() ritorna come risultato un intero:
0, se l’operazione di chiusura è eseguita correttamente
la costante predefinita EOF, se la chiusura non è andata a buon fine.

Il suo valore è -1.
Prima della chiusura, tutti i buffer vengono svutotati (I/O bufferizzato).

Funzione feof()
Durante la fase di accesso ad un file è possibile verificare la presenza della marca di fine file con la funzione di libreria:
int feof(FILE *stream);
feof() controlla se è stata raggiunta la fine del file stream nella operazione di lettura precedente. Restituisce il valore 0 (falso logico) se non è stata raggiunta la fine del file, altrimenti un valore diverso da zero (vero logico).

Lettura di un file binario
(I/O bufferizzato)
Una volta aperto il file, su di esso si può accedere in lettura e/o scrittura, compatibilmente con quanto specificato in fase di
apertura.
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
dove:
ptr, indirizzo di memoria della variabile in cui depositare i dati letti dal file
(solitamente un record logico)
size, dimensione in byte di ogni entità (record logico)
n, numero di entità (record logici) che si vogliono leggere (di solito 1)
stream, file da cui leggere
La funzione restituisce il numero di entità (record logici) effettivamente lette, che possono essere meno di quelle richieste se il file termina prima.
Restituisce 0 se incontra la fine del file o se è in errore.

Scrittura di un file binario
(I/O bufferizzato)
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
dove:
ptr, indirizzo di memoria della variabile che contiene i dati che dovranno
essere scritti sul file (solitamente un record logico)
size, dimensione in byte di ogni entità (record logico)
n, numero di entità (record logici) che si vogliono scrivere (di solito 1)
stream, file su cui scrivere
La funzione restituisce il numero di entità (record logici) effettivamente scritte. Restituisce 0 se è in errore.

Domande da interrogazione

  1. Come si apre un file in C e quali modalità di accesso sono disponibili?
  2. Un file in C si apre utilizzando la funzione `fopen()`, che richiede il nome del file e la modalità di accesso. Le modalità disponibili sono "r" per lettura, "w" per scrittura, "a" per aggiunta, "b" per file binari e "t" per file di testo.

  3. Cosa succede se l'apertura di un file con `fopen()` fallisce?
  4. Se l'apertura di un file con `fopen()` fallisce, la funzione restituisce il valore NULL, indicando che il file non è stato aperto correttamente.

  5. Qual è la funzione utilizzata per chiudere un file e cosa restituisce?
  6. La funzione utilizzata per chiudere un file è `fclose()`, che restituisce 0 se l'operazione è eseguita correttamente, altrimenti restituisce EOF (-1) se la chiusura non è andata a buon fine.

  7. Come si verifica la fine di un file durante la lettura?
  8. La fine di un file durante la lettura si verifica utilizzando la funzione `feof()`, che restituisce un valore diverso da zero se è stata raggiunta la fine del file, altrimenti restituisce 0.

  9. Quali sono le funzioni utilizzate per la lettura e la scrittura di file binari e cosa restituiscono?
  10. Le funzioni utilizzate per la lettura e la scrittura di file binari sono `fread()` e `fwrite()`, rispettivamente. Entrambe restituiscono il numero di entità effettivamente lette o scritte, e 0 in caso di errore o se si incontra la fine del file.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community