logo

C Programa, skirta skaityti viso failo turinį

C programavimo kalba palaiko keturias iš anksto nustatytas funkcijas, skirtas nuskaityti failo turinį, apibrėžtą stdio.h antraštės faile:

  1. fgetc() Ši funkcija naudojama nuskaityti vieną simbolį iš failo.
  2. fgets () Ši funkcija naudojama nuskaityti eilutes iš failų.
  3. fscanf() Ši funkcija naudojama nuskaityti suformatuotą įvestį iš failo.
  4. baisus () Ši funkcija naudojama neapdorotų baitų blokui nuskaityti iš failų. Tai naudojama dvejetainiams failams skaityti.

Failo skaitymo veiksmai:



  • Atidarykite failą naudodami funkciją fopen() ir išsaugokite failo nuorodą FILE žymeklyje.
  • Skaitykite failo turinį naudodami bet kurią iš šių funkcijų fgetc(), fgets(), fscanf() arba fread().
  • Failas uždarykite failą naudodami funkciją fclose().

Pradėkime išsamiai aptarti kiekvieną iš šių funkcijų.

gimp išsaugoti kaip jpeg

fgetc()

fgetc() skaito simbolius, tuo metu nurodytus funkcijos žymekliu. Kiekvieną kartą sėkmingai nuskaitant, jis grąžina iš srauto nuskaitytą simbolį (ASCII reikšmę) ir perkelia skaitymo vietą į kitą simbolį. Ši funkcija grąžina pastovų EOF (-1), kai nėra nuskaityto turinio arba nuskaitymas nesėkmingas.



Sintaksė:

int fgetc(FILE *ptr);

Metodas:



  • Ši programa nuskaito visą failo turinį, naudodama šią funkciją skaitydama simbolius po vieną.
  • Bus naudojama Do-While kilpa, kuri skaitys simbolį, kol pasieks failo pabaigą.
  • Kai jis pasiekia pabaigą, jis grąžina EOF simbolį (-1).

Naudojant EOF:
Žemiau yra C programa, skirta įgyvendinti aukščiau nurodytą metodą.

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

>

>

Įvesties failas:

techcodeview.com | A computer science portal for geeks>

Išvestis:

Aukščiau pateiktame kode metodas yra nuskaityti vieną simbolį iš failo ir patikrinti, ar jis nėra EOF, jei ne, tada atspausdinkite, o jei jis yra, tada nustokite skaityti.

Naudojant feof():
Funkcija feof() naudoja failo žymeklį kaip argumentą ir grąžina true, jei žymeklis pasiekia failo pabaigą.

Sintaksė:

int feof(FILE *ptr);

Metodas:

  • Taikant šį metodą, simbolis skaitomas naudojant fgetc().
  • Naudodami funkciją feof() patikrinkite failo pabaigą. nes feof() grąžina true, kai pasiekia pabaigą.
  • Naudokite loginį NOT operatorių(!), kad pasiekus pabaigos sąlygą taptų klaidinga ir ciklas sustotų.

Žemiau yra C programa, skirta įgyvendinti aukščiau nurodytą metodą:

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

>

>

Įvesties failas:

techcodeview.com | A computer science portal for geeks>

Išvestis:

fgets ()

fgets() skaito po vieną eilutę iš failo. fgets() grąžina eilutę, jei ją sėkmingai nuskaito funkcija, arba grąžina NULL, jei negali nuskaityti.

Sintaksė:

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

Čia
str: Tai eilutė, kurioje fgets() išsaugo eilutę, nuskaitęs ją iš failo.
dydis: Iš srauto galima nuskaityti daugiausia simbolių.
ptr: Tai failo rodyklė.

Metodas:

  • Taikant šį metodą, failo turinys skaitomas po vieną simbolį, kol pasiekiame failo pabaigą.
  • Kai pasiekiame failo pabaigą, fgets() negali skaityti ir grąžina NULL, o programa nustos skaityti.

Žemiau yra C programa, skirta įgyvendinti aukščiau nurodytą metodą:

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

>

eilutėje yra

>

Įvesties failas:

techcodeview.com | A computer science portal for geeks>

Išvestis:

fscanf()

fscanf() nuskaito suformatuotą įvestį iš srauto.

Sintaksė:

int fscanf (FILE *ptr, const char *formatas, ...)

Metodas:

  • fscanf nuskaito suformatuotus duomenis iš failų ir išsaugo juos kintamuosiuose.
  • Buferyje esantys duomenys spausdinami konsolėje, kol pasiekiama failo pabaiga.

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

>

>

Išvestis:

baisus ()

fread() leidžia lengviau nuskaityti duomenų blokus iš failo. Pavyzdžiui, nuskaitant struktūrą iš failo, tai tampa lengvas darbas naudojant fread.

Sintaksė:

size_t fread(tuščia *ptr, dydis_t dydis, dydis_t nmemb, FILE *srautas)

ptr: Tai žymeklis į atminties bloką, kurio minimalus dydis yra * nmemb baitai.
dydis: Tai kiekvieno nuskaityto elemento dydis baitais.
nmemb: Tai yra elementų skaičius, kurių kiekvienas yra baitų dydžio.
srautas: Tai žymeklis į FILE objektą, kuris nurodo įvesties srautą.

Metodas:

  • Pirmiausia jis nuskaito objektų skaičių, kurių kiekvienas turi baitų dydį iš nurodyto įvesties srauto.
  • Bendras baitų skaičius, nuskaitomas, jei sėkmingas yra (dydis*skaičius).
  • Pagal Nr. perskaitytų simbolių, indikatoriaus failo padėtis padidinama.
  • Jei nuskaitytų objektų negalima trivialiai nukopijuoti, tada elgsena neapibrėžta, o jei dydžio arba skaičiaus reikšmė yra lygi nuliui, ši programa tiesiog grąžins 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);> }>

>

>

Išvestis: