C Програма для читання вмісту всього файлу
Мова програмування C підтримує чотири попередньо визначені функції для читання вмісту з файлу, визначеного у файлі заголовка stdio.h:
- fgetc() – Ця функція використовується для читання окремого символу з файлу.
- fgets() – Ця функція використовується для читання рядків із файлів.
- fscanf() – Ця функція використовується для читання відформатованого введення з файлу.
- страх() – Ця функція використовується для читання блоку необроблених байтів із файлів. Це використовується для читання двійкових файлів.
Кроки для читання файлу:
- Відкрийте файл за допомогою функції 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() читає відформатований вхід із потоку.
Синтаксис:
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);> }> |
Вихід: