logo

C Program för att läsa innehållet i hela filen

C programmeringsspråk stöder fyra fördefinierade funktioner för att läsa innehåll från en fil, definierade i stdio.h header-fil:

  1. fgetc() Denna funktion används för att läsa ett enstaka tecken från filen.
  2. fgets() Denna funktion används för att läsa strängar från filer.
  3. fscanf() Denna funktion används för att läsa formaterad indata från en fil.
  4. fread() Denna funktion används för att läsa blocket av råbytes från filer. Detta används för att läsa binära filer.

Steg för att läsa en fil:



  • Öppna en fil med funktionen fopen() och lagra referensen till filen i en FIL-pekare.
  • Läs innehållet i filen med någon av dessa funktioner fgetc(), fgets(), fscanf() eller fread().
  • Fil stäng filen med funktionen fclose().

Låt oss börja diskutera var och en av dessa funktioner i detalj.

java objektsjämlikhet

fgetc()

fgetc() läser tecken som pekas av funktionspekaren vid den tiden. Vid varje lyckad läsning returnerar den tecknet (ASCII-värde) som lästs från strömmen och flyttar läspositionen till nästa tecken. Denna funktion returnerar en konstant EOF (-1) när det inte finns något innehåll att läsa eller en misslyckad läsning.



Syntax:

int fgetc(FIL *ptr);

Närma sig:



  • Detta program läser hela innehållet i filen och använder den här funktionen genom att läsa tecken en efter en.
  • Do-While loop kommer att användas som kommer att läsa tecken tills den når slutet av filen.
  • När den når slutet returnerar den EOF-tecken (-1).

Använder EOF:
Nedan är C-programmet för att implementera ovanstående tillvägagångssätt-

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;> }>

>

>

Indatafil:

techcodeview.com | A computer science portal for geeks>

Produktion:

I ovanstående kod är tillvägagångssättet att läsa ett tecken från filen och kontrollera om det inte är EOF, om det inte är det så skriv ut det och om det är sluta läsa.

Använder feof():
Feof()-funktionen tar filpekaren som argument och returnerar true om pekaren når slutet av filen.

Syntax:

int feof(FIL *ptr);

Närma sig:

  • I detta tillvägagångssätt läses ett tecken med fgetc().
  • Använd funktionen feof() för att söka efter filslut. eftersom feof() returnerar sant efter att det når slutet.
  • Använd logisk NOT-operator(!) så att när den når sluttillståndet blir false och loop stoppa.

Nedan är C-programmet för att implementera ovanstående tillvägagångssätt:

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;> }>

>

>

Indatafil:

techcodeview.com | A computer science portal for geeks>

Produktion:

fgets()

fgets() läser en sträng i taget från filen. fgets() returnerar en sträng om den läses av funktion eller returnerar NULL om den inte kan läsas.

Syntax:

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

Här,
str: Det är en sträng som fgets() lagrar sträng i efter att ha läst den från filen.
storlek: Det är maximalt antal tecken att läsa från stream.
ptr: Det är filpekare.

Närma sig:

  • I detta tillvägagångssätt läses filens innehåll ett tecken i taget tills vi når slutet av filen.
  • När vi når slutet av filen kan fgets() inte läsa och returnerar NULL och programmet slutar läsa.

Nedan är C-programmet för att implementera ovanstående tillvägagångssätt:

C




// 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;> }>

>

>

Indatafil:

techcodeview.com | A computer science portal for geeks>

Produktion:

fscanf()

ändlig tillståndsmaskin

fscanf() läser formaterad indata från en ström.

Syntax:

int fscanf(FIL *ptr, const char *format, …)

Närma sig:

  • fscanf läser formaterad data från filerna och lagrar den i variabler.
  • Data i bufferten skrivs ut på konsolen tills slutet av filen nås.

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;> }>

>

>

Produktion:

fread()

fread() gör det lättare att läsa datablock från en fil. Till exempel, när det gäller att läsa en struktur från filen, blir det ett enkelt jobb att läsa med hjälp av fread.

Syntax:

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

ptr: Detta är pekaren till ett minnesblock med en minsta storlek på storlek*nmemb byte.
storlek: Detta är storleken i byte för varje element som ska läsas.
nmemb: Detta är antalet element, vart och ett med en storlek på storleksbyte.
ström: Detta är pekaren till ett FILE-objekt som anger en ingångsström.

Närma sig:

  • Den läser först antalet objekt, vart och ett med en storlek på storleksbyte från den givna ingångsströmmen.
  • Den totala mängden byte som läses om lyckad är (storlek*antal).
  • Enligt nr. antal tecken som lästs, ökas indikatorfilens position.
  • Om de lästa objekten inte är trivialt kopierbara, är beteendet odefinierat och om värdet på storlek eller antal är lika med noll, kommer detta program helt enkelt att returnera 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);> }>

>

>

Produktion: