Programmazione · 6 min read · Oct 09, 2025

Apprendimento C/C++ Passo dopo Passo - Pagina 12

12. Passo dopo Passo CorC++ — Programmazione C - File

Gestione dei File

Introduzione

Troviamo l’output del seguente programma.

| | |

Sì, accetta un record di informazioni sugli studenti e lo visualizza.
Ecco lo stesso programma, ma con alcune dichiarazioni incluse e alcune modifiche.

| | |

I due programmi sopra sono identici, ma il secondo programma contiene una dichiarazione evidenziata ( FILE *fp = fopen(“stud.dat”, “a+”);) e alcune modifiche come ‘f printf’, ‘ fp’. Solo poche modifiche incluse. Queste modifiche influenzano il trasferimento dei dati dalla console al disco nel file stud.dat. Questo processo è noto come controllo file/gestione file/organizzazione file.

Questo è il modo più semplice per trasferire l’output dal monitor a un file utilizzando la dichiarazione di controllo file.

| | |

In realtà, l’elaborazione dei file comporta molte operazioni e metodi da implementare. Ecco il processo effettivo per gestire i file.

Gestione dei File

Generalmente, ogni programma deve presentare i valori risultanti sullo schermo (il 1° programma illustra questo). Ma quei valori vengono rimossi dalla memoria ogni volta che il programma viene terminato. Se vogliamo mantenere i record in modo permanente, salvali in un file. Ogni file ha alcune operazioni, ecco alcune;

| | |

| | |

Operazioni sui File

fopenApre il flusso filename nella modalità mode & se ha successo, restituisce un puntatore al flusso appena aperto; o Null altrimenti.
Sintassi **FILE fopen(const char filename, const char *mode);

| Esempio | FILE fp = fopen(“stud.dat”, “r”);   /  Leggi dal file  /
FILE
fp = fopen(“emp.dat”, “w”); /  Scrivi nel file  /
FILE fp = fopen(“emp.dat”, “a+”);           /  Leggi e Scrivi nel file / | | | Modalità:
La stringa di modalità utilizzata nelle chiamate a fopen è uno dei seguenti valori:
Modalità     Descrizione r Apri solo per lettura w Crea per scrivere (Se un file con quel nome esiste già, verrà sovrascritto). a Aggiungi; apri per scrivere alla fine del file, o crea per
scrivere se il file non esiste.
r+ Apri un file esistente per aggiornamento (lettura e scrittura) w+ Crea un nuovo file per aggiornamento (lettura e scrittura).
Se un file con quel nome esiste già, verrà sovrascritto.
a+ Apri per aggiungere; apri per aggiornamento alla fine del file, o
crea se il file non esiste. Per specificare che un dato file viene aperto o creato in modalità testo,
aggiungi “
t “ alla stringa ( rt, w+t,*
ecc.).

Per specificare la modalità binaria, aggiungi “ b “ alla stringa ( wb, a+b, ecc.). | | fclose | Chiude il file puntato da fp & restituisce 0 in caso di successo, EOF viene restituito in caso di errore | | Sintassi | Int fclose(FILE *fp); | | esempio | Fclose(fp);  fclose(stud);   fcloseall(); | | fprintf | Invia output formattato a un flusso. Usa gli stessi specificatori di formato di printf, ma invia l’output al flusso specificato. Restituisce il numero di byte inviati o EOF in caso di errore. | | Sintassi | Fprintf(fptr, “Stringa di Controllo”, lista); | | Esempio | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Questa funzione viene utilizzata per leggere dati formattati da un file specificato. | | Sintassi: | Fscanf(fptr, “Stringa di Controllo”, lista); | | Esempio | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite aggiunge un numero specificato di elementi di dati di dimensioni uguali a un file di output. | | Sintassi: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Argomento  Cosa È/Fa Ptr Puntatore a qualsiasi oggetto; i dati scritti iniziano a ptr Size Lunghezza di ciascun elemento di dati N Numero di elementi di dati da aggiungere stream Specifica il file di output
Il numero totale di byte scritti è  (
n size) | | fread | Fread recupera un numero specificato di elementi di dati di dimensioni uguali da un file di input. | | Sintassi | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Argomento  Cosa È/Fa Ptr Puntatore a qualsiasi oggetto; i dati scritti iniziano a ptr size Lunghezza di ciascun elemento di dati n Numero di elementi di dati da aggiungere stream Specifica il file di output
Il numero totale di byte scritti è (
n
size) | | rewind
| Riposiziona il puntatore del file all’inizio dello stream | | Sintassi | Void rewind(FILE stream);
Esempio.      fewind(fp);
Rewind(stream) è equivalente a fseek(stream, 0L, SEEK_SET)
escluso che rewind cancella gli indicatori di fine file e errore, mentre fseek cancella solo l’indicatore di fine file. Dopo rewind, la prossima operazione su un file di aggiornamento può essere sia input che output. | |
fseek | Il puntatore del file per lo stream è posizionato all’offset numero di byte calcolato dalla posizione specificata da whence. L’offset può essere zero, negativo o positivo. I simboli definiti SEEK_CUR, SEEK_SET & SEEK_END sono usati come specificatori whence per indicare la posizione corrente. BOF & EOF rispettivamente. Restituisce 0 se ha successo o un valore diverso da zero in caso di errore. | | Sintassi | Int fssek(FILE
stream, long offset, int whence); | | ftell
| Restituisce la posizione corrente del puntatore del file in caso di successo o un valore negativo in caso di errore. | | Sintassi | Long ftell(FILE *stream); | | feof | È una macro per restituire un valore diverso da zero se è stata raggiunta la fine del file nello stream. | | Sintassi | Int feof(FILE *stream); | | eof | Controlla se il marcatore di posizione nel file dato dal suo handle è alla fine del file. Se sì, restituisce 0, 1 viene restituito se il marcatore di posizione NON è alla fine del file & un errore è indicato dall’impostazione di errno & dal valore di ritorno di –1. | | Sintassi | Int eof(int handle); | | fgets /
fputs | La funzione fgets/fputs ottiene/mette una stringa (di dimensione n byte) nel file puntato da stream e restituisce la fine del file in caso di errore. | | Sintassi | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Sintassi | Legge/scrive un carattere da uno stream.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Questi sono equivalenti ai precedenti fgetc/fputc.

Scrivi un programma per leggere i dati di uno studente e memorizzarli in un file di dati.

| | / Programma per creare un file di dati dello studente /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Inserisci il numero dello studente        “); scanf(“%d”, &sno);
printf(“Inserisci il nome dello studente          “); scanf(“%s”, name);
printf(“Inserisci i voti di 3 materie      “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\nVuoi continuare… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |

Scrivi un programma per recuperare i dati da un file di dati dello studente.

| | / Programma per recuperare i dati da un file di dati dello studente /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“I record degli studenti sono i seguenti….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.