C – файловый ввод/вывод

Опубликовано: 28 Января, 2023

В этой статье вы узнаете, что такое файлы в C, зачем они нужны и как обрабатывать стандартный ввод-вывод в C с помощью различных функций C, таких как fopen(), fclose(), fprintf(), fscanf(). , getc(), putc(), getw(), fseek() и т. д. Файл представляет собой последовательность байтов независимо от того, является ли он текстовым или двоичным файлом.

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

Типы файлов

В основном существует два типа файлов, которые можно обрабатывать с помощью File Handling в C:

1. Текстовые файлы. Это простые текстовые файлы, которые сохраняются с расширением (.txt) и могут быть созданы или изменены любым текстовым редактором. Текстовый файл хранит данные в виде символов ASCII и используется для хранения потока символов.

2. Двоичные файлы: они хранятся в двоичном формате вместо символов ASCII. Двоичные файлы обычно используются для хранения числовой информации (int, float, double). Здесь данные хранятся в двоичной форме, т.е. (0 и 1).

Различные операции, которые могут быть выполнены с файлом:

  1. Создание нового файла (fopen с атрибутами «a», «a+», «w» или «w+»).
  2. Открытие существующего файла (fopenopen).
  3. Чтение из файла (fscanf или fgets).
  4. Запись в файл с помощью fprintf или fputs.
  5. Перемещение указателя файла, связанного с данным файлом, в определенную позицию. (fseek, перемотка назад).
  6. Закрытие файла (закрыть).

Для выполнения операций над файлом используется специальный указатель File pointer, который можно объявить как:

FILE file_ptr;

We can open the file as

file_ptr = fopen(“fileName.txt”, “w”);

Второй параметр, т. е. «w», можно изменить в соответствии с таблицей ниже:

Режимы открытия Описание
р Ищет файл. Если файл успешно открыт, функция fopen() загружает его в память и устанавливает указатель, указывающий на первый символ в нем. Если файл не может быть открыт, fopen() возвращает NULL.
рб Открыт для чтения в бинарном режиме. Если файл не существует, то fopen() вернет NULL.
ж Ищет файл. Содержимое перезаписывается, если файл существует. Новый файл создается, если файл не существует. Возвращает NULL, если не удается открыть файл.
бб Открыт для записи в бинарном режиме. Его содержимое перезаписывается, если файл существует, в противном случае файл будет создан.
а Ищет файл. Если файл успешно открыт, функция fopen() загружает его в память и устанавливает указатель, указывающий на последний символ в нем. Если файл не существует, создается новый файл. Возвращает NULL, если не удается открыть файл.
аб Открыть для добавления в двоичном режиме. Данные добавляются в конец файла. Файл будет создан, если он не существует.
г+ Ищет файл. Он успешно открыт. Функция fopen() загружает его в память и устанавливает указатель, указывающий на первый символ в нем. Если он не может открыть файл, он возвращает NULL.
руб+ Открыт как для чтения, так и для записи в двоичном режиме. fopen() возвращает NULL, если файл не существует.
ж+ Ищет файл. Его содержимое перезаписывается, если файл существует. Новый файл создается, если файл не существует. Возвращает NULL, если не удается открыть файл.
вб+ Открыт как для чтения, так и для записи в двоичном режиме. Содержимое перезаписывается, если файл существует. Он будет создан, если файл не существует.
+ Ищет файл. Если файл успешно открыт, функция fopen() загружает его в память и устанавливает указатель, указывающий на последний символ в нем. Если файл не существует, создается новый файл. Возвращает NULL, если не удается открыть файл.
аб+ Открыт как для чтения, так и для добавления в двоичном режиме. Файл будет создан, если файл не существует.

Если вы хотите работать с двоичными файлами, используйте такие режимы, как «rb», «wb», «ab», «rb+», r+b», «wb+», «w+b», «ab+», «a+b». ” будет использоваться в основном.

Открытие или создание файла в C

Чтобы выполнить открытие и создание файла в c, мы можем использовать функцию fopen(), которая находится в заголовочном файле stdio.h.

Синтаксис:

p = fopen(“fileopen”, “mode”);

Пример:

p = fopen(“Hello.txt”, r);

Чтение и запись в текстовый файл в C

fprintf() и fscanf() используются для чтения и записи в текстовый файл в программировании на C. Они ожидают указатель на структуру FILE, поскольку они являются файловыми версиями функций print() и scanf().

Выход:

Вышеупомянутая программа берет строку от пользователя и сохраняет ее в text_file.text. После компиляции этой программы в папке C_Program будет создан текстовый файл с именем temp_text.txt. Внутри файла мы видим строку, которую мы ввели.

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

Выход:

Чтение и запись в двоичный файл

fread() используется для чтения из двоичного файла, а fwrite() используется для записи в файл на диске.

1. Запись в двоичный файл

Функция fwrite() принимает четыре аргумента: адрес данных, размер данных, которые должны быть записаны на диск, количество типов данных и указатель на файл, в который мы хотим записать.

Синтаксис:

fwrite(const void *ptr,size_of_elements,number_of_elements, FILE *a_file);

Ниже приведена программа на C для записи в двоичный файл:

Выход:

Объяснение: В приведенной выше программе мы создаем новый файл с именем GFG.bin. Структура с именем Num была объявлена с двумя числами — n1, n2 и создала объект с именем obj. В цикле for мы сохраняем значения в файле с помощью функции fwrite(). Первый параметр принимает адрес obj, а второй — размер определенной структуры Num.

Поскольку мы вставили только один экземпляр obj, третий параметр будет равен 1. fptr будет указывать на файл, в котором хранятся данные. И, наконец, мы закрыли файл.

2. Чтение из бинарного файла

Функция fread() также принимает четыре аргумента, которые аналогичны функции fwrite() в программировании на C.

Синтаксис:

fwrite(const void *ptr,size_of_elements,number_of_elements, FILE *a_file);

Ниже приведена программа C для чтения из двоичного файла:

Выход:

Объяснение: В приведенной выше программе мы прочитали один и тот же файл GFG.bin и перебираем записи одну за другой. Мы читаем одну запись Num размера Num из файла, на который указывает *fptr, в структуру Num. Мы получим ту же запись, которую мы вставили в предыдущей программе.

Перемещение указателей файлов в определенные позиции

fseek() и rewind() — это два метода программирования на C, которые можно использовать для перемещения указателя файла.

1. fseek() в программировании на C

Функция fseek() используется для установки указателя файла на указанное смещение и записи данных в файл.

Синтаксис:

int fseek(FILE *stream, long int offset, int whence);

Здесь,

  • откуда может быть SEEK_SET, SEEK_CUR и SEEK_END.
  • SEEK_END: обозначает конец файла.
  • SEEK_SET: обозначает запуск файла.
  • SEEK_CUR: обозначает текущую позицию указателя файла.

Ниже приведена программа на C для реализации fseek():

Выход:

2. перемотка() в C

Функция rewind() устанавливает указатель файла на начало файла.

Синтаксис:

void rewind(FILE *stream);

Ниже приведена программа на C для реализации функции rewind():

Выход:

C