C – файловый ввод/вывод
В этой статье вы узнаете, что такое файлы в 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).
Различные операции, которые могут быть выполнены с файлом:
- Создание нового файла (fopen с атрибутами «a», «a+», «w» или «w+»).
- Открытие существующего файла (fopenopen).
- Чтение из файла (fscanf или fgets).
- Запись в файл с помощью fprintf или fputs.
- Перемещение указателя файла, связанного с данным файлом, в определенную позицию. (fseek, перемотка назад).
- Закрытие файла (закрыть).
Для выполнения операций над файлом используется специальный указатель 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():
Выход: