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
| fopen | Apre 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;
} |
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.