logo

C Programma per leggere il contenuto dell'intero file

Linguaggio di programmazione C supporta quattro funzioni predefinite per leggere il contenuto di un file, definite nel file di intestazione stdio.h:

  1. fgetc() Questa funzione viene utilizzata per leggere un singolo carattere dal file.
  2. fget() Questa funzione viene utilizzata per leggere stringhe da file.
  3. fscanf() Questa funzione viene utilizzata per leggere l'input formattato da un file.
  4. paura() Questa funzione viene utilizzata per leggere il blocco di byte grezzi dai file. Viene utilizzato per leggere file binari.

Passaggi per leggere un file:



  • Apri un file utilizzando la funzione fopen() e memorizza il riferimento del file in un puntatore FILE.
  • Leggere il contenuto del file utilizzando una qualsiasi di queste funzioni fgetc(), fgets(), fscanf() o fread().
  • File chiudere il file utilizzando la funzione fclose().

Iniziamo a discutere ciascuna di queste funzioni in dettaglio.

la stringa sostituisce tutto Java

fgetc()

fgetc() legge i caratteri puntati dal puntatore alla funzione in quel momento. Ad ogni lettura riuscita, restituisce il carattere (valore ASCII) letto dallo stream e fa avanzare la posizione di lettura al carattere successivo. Questa funzione restituisce un EOF costante (-1) quando non c'è contenuto da leggere o una lettura non riuscita.



Sintassi:

int fgetc(FILE *ptr);

Approccio:



  • Questo programma legge l'intero contenuto del file, utilizzando questa funzione leggendo i caratteri uno per uno.
  • Verrà utilizzato il ciclo Do-While che leggerà il carattere fino a raggiungere la fine del file.
  • Quando raggiunge la fine restituisce il carattere EOF (-1).

Utilizzando EOF:
Di seguito è riportato il programma C per implementare l'approccio di cui sopra:

C




// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> ch;> >// Opening file in reading mode> >ptr =>fopen>(>'test.txt'>,>'r'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened '>);> >}> >printf>(>'content of this file are '>);> >// Printing what is written in file> >// character by character using loop.> >do> {> >ch =>fgetc>(ptr);> >printf>(>'%c'>, ch);> >// Checking if character is not EOF.> >// If it is EOF stop reading.> >}>while> (ch != EOF);> >// Closing the file> >fclose>(ptr);> >return> 0;> }>

>

>

File di input:

techcodeview.com | A computer science portal for geeks>

Produzione:

Nel codice sopra, l'approccio è leggere un carattere dal file e controllare se non è EOF, se non lo è stamparlo e se lo è interrompere la lettura.

Utilizzando feof():
La funzione feof() accetta il puntatore del file come argomento e restituisce true se il puntatore raggiunge la fine del file.

Sintassi:

int feof(FILE *ptr);

Approccio:

  • In questo approccio, un carattere viene letto utilizzando fgetc().
  • Usando la funzione feof() controlla la fine del file. poiché feof() restituisce true dopo aver raggiunto la fine.
  • Utilizzare l'operatore NOT logico (!) in modo che quando raggiunge la fine la condizione diventi falsa e il ciclo si interrompa.

Di seguito è riportato il programma C per implementare l'approccio di cui sopra:

C




// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> ch;> >ptr =>fopen>(>'test.txt'>,>'r'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened '>);> >}> >printf>(>'content of this file are '>);> >while> (!>feof>(ptr)) {> >ch =>fgetc>(ptr);> >printf>(>'%c'>, ch);> >}> >fclose>(ptr);> >return> 0;> }>

>

>

File di input:

techcodeview.com | A computer science portal for geeks>

Produzione:

fget()

fgets() legge una stringa alla volta dal file. fgets() restituisce una stringa se viene letta correttamente dalla funzione o restituisce NULL se non può leggere.

Sintassi:

char * fgets(char *str, int size, FILE * ptr);

Qui,
stringa: È una stringa in cui fgets() memorizza la stringa dopo averla letta dal file.
misurare: È il numero massimo di caratteri da leggere dallo stream.
ptr: È un puntatore al file.

Approccio:

  • In questo approccio, il contenuto del file viene letto un carattere alla volta fino a raggiungere la fine del file.
  • Quando raggiungiamo la fine del file fgets() non può leggere e restituisce NULL e il programma smetterà di leggere.

Di seguito è riportato il programma C per implementare l'approccio di cui sopra:

C




Codici di errore di Linux

// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> >FILE>* ptr;> >char> str[50];> >ptr =>fopen>(>'test.txt'>,>'a+'>);> >if> (NULL == ptr) {> >printf>(>'file can't be opened '>);> >}> >printf>(>'content of this file are '>);> >while> (>fgets>(str, 50, ptr) != NULL) {> >printf>(>'%s'>, str);> >}> >fclose>(ptr);> >return> 0;> }>

>

>

File di input:

techcodeview.com | A computer science portal for geeks>

Produzione:

fscanf()

fscanf() legge l'input formattato da un flusso.

Sintassi:

int fscanf(FILE *ptr, const char *formato, …)

Approccio:

  • fscanf legge i dati formattati dai file e li memorizza in variabili.
  • I dati nel buffer vengono stampati sulla console fino al raggiungimento della fine del file.

C++




// C program to implement> // the above approach> #include> // Driver code> int> main()> {> >FILE>* ptr =>fopen>(>'abc.txt'>,>'r'>);> >if> (ptr == NULL) {> >printf>(>'no such file.'>);> >return> 0;> >}> >/* Assuming that test.txt has content> >in below format> >NAME AGE CITY> >abc 12 hyderbad> >bef 25 delhi> >cce 65 bangalore */> >char> buf[100];> >while> (>fscanf>(ptr,>'%*s %*s %s '>,> >buf)> >== 1)> >printf>(>'%s '>, buf);> >return> 0;> }>

>

>

Produzione:

paura()

fread() semplifica la lettura di blocchi di dati da un file. Ad esempio, nel caso di leggere una struttura dal file, diventa un lavoro facile da leggere usando fread.

Sintassi:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr: Questo è il puntatore a un blocco di memoria con una dimensione minima di size*nmemb byte.
misurare: Questa è la dimensione in byte di ciascun elemento da leggere.
nome: Questo è il numero di elementi, ciascuno con una dimensione di size byte.
flusso: Questo è il puntatore a un oggetto FILE che specifica un flusso di input.

Approccio:

  • Per prima cosa legge il numero di oggetti, ciascuno con una dimensione di size byte, dal flusso di input specificato.
  • La quantità totale di byte letti in caso di successo è (dimensione*conteggio).
  • Secondo il n. di caratteri letti, la posizione del file indicatore viene incrementata.
  • Se gli oggetti letti non sono banalmente copiabili, allora il comportamento non è definito e se il valore di size o count è uguale a zero, allora questo programma restituirà semplicemente 0.

C++




// C program to implement> // the above approach> #include> #include> #include> // Structure to store> // course details> struct> Course {> >char> cname[30];> >char> sdate[30];> };> // Driver code> int> main()> {> >FILE>* of;> >of =>fopen>(>'test.txt'>,>'w'>);> >if> (of == NULL) {> >fprintf>(stderr,> >' Error to open the file '>);> >exit>(1);> >}> >struct> Course inp1 = {>'Algorithms'>,> >'30OCT'> };> >struct> Course inp2 = {>'DataStructures'>,> >'28SEPT'> };> >struct> Course inp3 = {>'Programming'>,> >'1NOV'> };> >fwrite>(&inp1,>sizeof>(>struct> Course),> >1, of);> >fwrite>(&inp2,>sizeof>(>struct> Course),> >1, of);> >fwrite>(&inp3,>sizeof>(>struct> Course),> >1, of);> >if> (>fwrite> != 0)> >printf>(>'Contents to file written successfully ! '>);> >else> >printf>(>'Error writing file ! '>);> >fclose>(of);> >// File pointer to read from file> >FILE>* inf;> >struct> Course inp;> >inf =>fopen>(>'test.txt'>,>'r'>);> >if> (inf == NULL) {> >fprintf>(stderr,> >' Error to open the file '>);> >exit>(1);> >}> >while> (>fread>(&inp,>sizeof>(>struct> Course),> >1, inf))> >printf>(>'Course Name = %s Started = %s '>,> >inp.cname, inp.sdate);> >fclose>(inf);> }>

>

>

Produzione: