logo

C Program pro čtení obsahu celého souboru

C programovací jazyk podporuje čtyři předdefinované funkce pro čtení obsahu ze souboru, definované v záhlaví souboru stdio.h:

  1. fgetc() Tato funkce se používá ke čtení jednoho znaku ze souboru.
  2. fgets() Tato funkce se používá ke čtení řetězců ze souborů.
  3. fscanf() Tato funkce se používá ke čtení formátovaného vstupu ze souboru.
  4. fread() Tato funkce se používá ke čtení bloku nezpracovaných bajtů ze souborů. To se používá ke čtení binárních souborů.

Kroky ke čtení souboru:



  • Otevřete soubor pomocí funkce fopen() a uložte odkaz na soubor do ukazatele FILE.
  • Čtěte obsah souboru pomocí kterékoli z těchto funkcí fgetc(), fgets(), fscanf() nebo fread().
  • Soubor zavřete soubor pomocí funkce fclose().

Začněme podrobně diskutovat o každé z těchto funkcí.

jak velká je obrazovka mého monitoru

fgetc()

fgetc() čte znaky, na které v daný okamžik ukazuje ukazatel funkce. Při každém úspěšném čtení vrátí znak (hodnotu ASCII) přečtený z proudu a posune čtenou pozici na další znak. Tato funkce vrací konstantní EOF (-1), když není žádný obsah ke čtení nebo je čtení neúspěšné.



Syntax:

int fgetc(SOUBOR *ptr);

Přístup:



  • Tento program čte celý obsah souboru pomocí této funkce čtením znaků jeden po druhém.
  • Použije se smyčka Do-While, která bude číst znak, dokud nedosáhne konce souboru.
  • Když dosáhne konce, vrátí znak EOF (-1).

Použití EOF:
Níže je uveden program C pro implementaci výše uvedeného přístupu –

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

>

>

Vložte soubor:

techcodeview.com | A computer science portal for geeks>

Výstup:

Ve výše uvedeném kódu je přístup číst jeden znak ze souboru a zkontrolovat, zda to není EOF, pokud není, vytisknout jej a pokud je přestat číst.

Použití feof():
Funkce feof() vezme ukazatel na soubor jako argument a vrátí hodnotu true, pokud ukazatel dosáhne konce souboru.

Syntax:

int feof(FILE *ptr);

Přístup:

  • V tomto přístupu se znak čte pomocí fgetc().
  • Pomocí funkce feof() zkontrolujte konec souboru. protože feof() vrátí true poté, co dosáhne konce.
  • Použijte logický operátor NOT(!), aby se při dosažení koncové podmínky stal false a smyčka se zastavila.

Níže je uveden program C pro implementaci výše uvedeného přístupu:

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

>

>

Vložte soubor:

techcodeview.com | A computer science portal for geeks>

Výstup:

fgets()

fgets() čte ze souboru jeden řetězec po druhém. fgets() vrátí řetězec, pokud je úspěšně přečten funkcí, nebo vrátí NULL, pokud nelze číst.

Syntax:

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

Tady,
str: Je to řetězec, do kterého fgets() ukládá řetězec po jeho načtení ze souboru.
velikost: Je to maximální počet znaků ke čtení ze streamu.
ptr: Je to ukazatel souboru.

Přístup:

  • V tomto přístupu se obsah souboru čte jeden znak po druhém, dokud nedosáhneme konce souboru.
  • Když se dostaneme na konec souboru, fgets() nemůže číst a vrátí NULL a program přestane číst.

Níže je uveden program C pro implementaci výše uvedeného přístupu:

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

>

>

Vložte soubor:

program java ahoj
techcodeview.com | A computer science portal for geeks>

Výstup:

fscanf()

fscanf() čte formátovaný vstup ze streamu.

Syntax:

int fscanf(FILE *ptr, const char *formát, …)

Přístup:

  • fscanf čte formátovaná data ze souborů a ukládá je do proměnných.
  • Data ve vyrovnávací paměti se tisknou na konzoli, dokud není dosaženo konce souboru.

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

>

>

Výstup:

fread()

fread() usnadňuje čtení bloků dat ze souboru. Například v případě čtení struktury ze souboru se stává snadno čitelná pomocí fread.

Syntax:

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

ptr: Toto je ukazatel na blok paměti s minimální velikostí size*nmemb bajtů.
velikost: Toto je velikost v bajtech každého prvku, který se má číst.
nmemb: Toto je počet prvků, z nichž každý má velikost bajtů.
proud: Toto je ukazatel na objekt FILE, který určuje vstupní proud.

Přístup:

  • Nejprve načte počet objektů, každý o velikosti bajtů z daného vstupního proudu.
  • Celkový počet přečtených bajtů v případě úspěchu je (velikost*počet).
  • Podle ne. přečtených znaků, pozice indikátorového souboru se zvýší.
  • Pokud čtené objekty nejsou triviálně kopírovatelné, pak je chování nedefinované a pokud je hodnota velikosti nebo počtu rovna nule, pak tento program jednoduše vrátí 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);> }>

>

>

Výstup: