logo

C Програма для читання вмісту всього файлу

Мова програмування C підтримує чотири попередньо визначені функції для читання вмісту з файлу, визначеного у файлі заголовка stdio.h:

  1. fgetc() Ця функція використовується для читання окремого символу з файлу.
  2. fgets() Ця функція використовується для читання рядків із файлів.
  3. fscanf() Ця функція використовується для читання відформатованого введення з файлу.
  4. страх() Ця функція використовується для читання блоку необроблених байтів із файлів. Це використовується для читання двійкових файлів.

Кроки для читання файлу:



  • Відкрийте файл за допомогою функції fopen() і збережіть посилання на файл у вказівнику FILE.
  • Прочитайте вміст файлу за допомогою будь-якої з цих функцій fgetc(), fgets(), fscanf() або fread().
  • Файл закрийте файл за допомогою функції fclose().

Давайте почнемо детальніше обговорювати кожну з цих функцій.

листоноша

fgetc()

fgetc() читає символи, на які вказує вказівник функції в той час. Після кожного успішного читання він повертає символ (значення ASCII), прочитаний із потоку, і переміщує позицію читання до наступного символу. Ця функція повертає постійний EOF (-1), якщо немає вмісту для читання або невдале читання.



Синтаксис:

int fgetc(ФАЙЛ *ptr);

Підхід:



  • Ця програма зчитує весь вміст файлу, використовуючи цю функцію, читаючи символи один за одним.
  • Використовуватиметься цикл Do-While, який читатиме символ, поки він не досягне кінця файлу.
  • Коли він досягає кінця, він повертає символ EOF (-1).

Використання EOF:
Нижче наведено програму C для реалізації вищезазначеного підходу-

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

>

>

Вхідний файл:

techcodeview.com | A computer science portal for geeks>

Вихід:

У наведеному вище коді підхід полягає в тому, щоб прочитати один символ із файлу та перевірити, чи не є він EOF, якщо це не так, тоді надрукувати його, а якщо це – припинити читання.

Використання feof():
Функція feof() приймає вказівник на файл як аргумент і повертає значення true, якщо вказівник досягає кінця файлу.

Синтаксис:

int feof(ФАЙЛ *ptr);

Підхід:

  • У цьому підході символ читається за допомогою fgetc().
  • За допомогою функції feof() перевірте кінець файлу. оскільки feof() повертає true після досягнення кінця.
  • Використовуйте логічний оператор NOT(!), щоб, коли він досягає кінця, умова ставала false і цикл зупинявся.

Нижче наведено програму на C для реалізації вищезазначеного підходу:

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

>

>

Вхідний файл:

techcodeview.com | A computer science portal for geeks>

Вихід:

fgets()

fgets() зчитує з файлу один рядок за раз. fgets() повертає рядок, якщо він успішно прочитаний функцією, або повертає NULL, якщо не може прочитати.

Синтаксис:

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

тут,
str: Це рядок, у якому fgets() зберігає рядок після його читання з файлу.
розмір: З потоку можна прочитати максимальну кількість символів.
ptr: Це покажчик файлу.

Підхід:

  • У цьому підході вміст файлу читається по одному символу, доки ми не досягнемо кінця файлу.
  • Коли ми досягаємо кінця файлу, fgets() не може читати та повертає NULL, і програма припинить читання.

Нижче наведено програму на C для реалізації вищезазначеного підходу:

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

>

>

Вхідний файл:

techcodeview.com | A computer science portal for geeks>

Вихід:

fscanf()

fscanf() читає відформатований вхід із потоку.

Синтаксис:

Команда linux для zip

int fscanf(ФАЙЛ *ptr, const char *format, …)

Підхід:

  • fscanf читає відформатовані дані з файлів і зберігає їх у змінних.
  • Дані в буфері друкуються на консолі до досягнення кінця файлу.

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

>

>

Вихід:

страх()

fread() полегшує читання блоків даних із файлу. Наприклад, у разі читання структури з файлу, це стає легкою роботою для читання за допомогою fread.

Синтаксис:

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

ptr: Це вказівник на блок пам'яті з мінімальним розміром size*nmemb байт.
розмір: Це розмір у байтах кожного елемента для читання.
nmemb: Це кількість елементів, кожен з яких має розмір size байтів.
потік: Це вказівник на об’єкт FILE, який визначає вхідний потік.

Підхід:

  • Спочатку він зчитує лічильну кількість об’єктів, кожен з яких має розмір розміру байтів, із заданого вхідного потоку.
  • Загальна кількість байтів, зчитаних у разі успіху, становить (розмір*кількість).
  • Відповідно до № прочитаних символів, позиція файлу індикатора збільшується.
  • Якщо прочитані об’єкти не можна тривіально копіювати, тоді поведінка є невизначеною, а якщо значення size або count дорівнює нулю, то ця програма просто поверне 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);> }>

>

>

Вихід: