C Программа для чтения содержимого всего файла

Опубликовано: 7 Октября, 2022

Язык программирования C поддерживает четыре предопределенных функции для чтения содержимого из файла, определенного в заголовочном файле stdio.h:

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

Шаги для чтения файла:

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

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

fgetc()

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

Синтаксис:

int fgetc(FILE *ptr);

Подход:

  • Эта программа читает все содержимое файла, используя эту функцию, считывая символы один за другим.
  • Будет использоваться цикл Do-While, который будет считывать символ до тех пор, пока он не достигнет конца файла.
  • Когда он достигает конца, он возвращает символ EOF (-1).

Использование EOF:
Ниже приведена программа C для реализации вышеуказанного подхода:

C




// C program to implement
// the above approach
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// 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 eading.
    } while (ch != EOF);
 
    // Closing the file
    fclose(ptr);
    return 0;
}

Входной файл:

GeeksforGeeks | A computer science portal for geeks

Выход:

В приведенном выше коде подход состоит в том, чтобы прочитать один символ из файла и проверить, не является ли он EOF, если это не так, то распечатать его, а если это так, то прекратить чтение.

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

Синтаксис:

int feof(FILE *ptr);

Подход:

  • В этом подходе символ считывается с помощью fgetc().
  • Использование функции feof() для проверки конца файла. так как feof() возвращает true после достижения конца.
  • Используйте логический оператор НЕ(!), чтобы при достижении конечного условия стало ложным и цикл остановился.

Ниже приведена программа на C для реализации описанного выше подхода:

Входной файл:

GeeksforGeeks | A computer science portal for geeks

Выход:

fgets()

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

Синтаксис:

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

Here,  
str: It is string in which fgets() store string after reading it from file.
size: It is maximum characters to read from stream.
ptr: It is file pointer.

Подход:

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

Ниже приведена программа на C для реализации описанного выше подхода:

Входной файл:

GeeksforGeeks | A computer science portal for geeks

Выход:

фсканф()

fscanf() читает форматированный ввод из потока.

Синтаксис:

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

Подход:

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

Выход:

fread()

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

Синтаксис:

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

ptr: This is the pointer to a block of memory with a minimum size of size*nmemb bytes.
size: This is the size in bytes of each element to be read.
nmemb: This is the number of elements, each one with a size of size bytes.
stream: This is the pointer to a FILE object that specifies an input stream.

Подход:

  • Сначала он считывает количество объектов, каждый из которых имеет размер size байтов из заданного входного потока.
  • Общее количество байтов, прочитанных в случае успеха, равно (размер*количество).
  • Согласно нет. прочитанных символов позиция файла индикатора увеличивается.
  • Если прочитанные объекты не являются копируемыми тривиально, то поведение не определено, и если значение size или count равно нулю, то эта программа просто вернет 0.

Выход:

РЕКОМЕНДУЕМЫЕ СТАТЬИ