Какие операции можно выполнять с файлами в c

Обновлено: 21.11.2024

Файл представляет собой последовательность байтов на диске, в которой хранится группа связанных данных. Файл создается для постоянного хранения данных. Это готовая структура.

В языке C мы используем указатель структуры типа файла для объявления файла.

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

< tr>< /tr>
Функцияописание
fopen()создать новый файл или открыть существующий файл
fclose()закрыть файл
getc()считывает символ из файла
putc()записывает символ в файл
fscanf()считывает набор данных из файла
fprintf()записывает набор данных в файл
getw()считывает целое число из файла
putw ()записывает целое число в файл
fseek()устанавливает позицию в желаемую точку
ftell()выдает текущую позицию в файле
rewind()set положение до начальной точки

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

Функция fopen() используется для создания нового файла или открытия существующего файла.

Общий синтаксис:

Здесь *fp — это указатель ФАЙЛА ( FILE *fp ), который будет содержать ссылку на открытый (или созданный) файл.

filename — это имя открываемого файла, а режим определяет цель открытия файла. Режим может быть следующих типов,

Закрытие файла

Функция fclose() используется для закрытия уже открытого файла.

Общий синтаксис:

Здесь функция fclose() закрывает файл и возвращает ноль в случае успеха или EOF, если при закрытии файла произошла ошибка. Этот EOF является константой, определенной в заголовочном файле stdio.h.

Операция ввода/вывода в файле

В приведенной выше таблице мы обсудили различные функции файлового ввода-вывода для чтения и записи в файл. getc() и putc() — самые простые функции, которые можно использовать для чтения и записи отдельных символов в файл.

Чтение и запись в файл с использованием функций fprintf() и fscanf()

В этой программе мы создали два указателя FILE, и оба они ссылаются на один и тот же файл, но в разных режимах.

Функция fprintf() записывает напрямую в файл, а fscanf() читает из файла, который затем можно распечатать на консоли с помощью стандартной функции printf().

Разница между режимами добавления и записи

Режим записи (w) и режим добавления (a) при открытии файла почти одинаковы. Оба используются для записи в файл. В обоих режимах создается новый файл, если он еще не существует.

Единственная разница между ними заключается в том, что когда вы открываете файл в режиме записи, файл сбрасывается, что приводит к удалению всех данных, уже имеющихся в файле. В режиме добавления этого не произойдет. Режим добавления используется для добавления или добавления данных к существующим данным файла (если они есть). Следовательно, когда вы открываете файл в режиме Append(a), курсор располагается в конце имеющихся данных в файле.

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

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

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

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

Обработка файлов — это сохранение данных в файле с помощью программы. В языке программирования C программы сохраняют результаты и другие данные программы в файл, используя обработку файлов в C. Кроме того, мы можем извлекать/извлекать данные из файла для работы с ним в программе. .

Операции, которые вы можете выполнять с файлом в C: —

Создание нового файла

Открытие существующего файла

Чтение данных из существующего файла

Запись данных в файл

Перемещение данных в определенное место в файле

Закрытие файла

Создание или открытие файла с помощью fopen()

Функция fopen() используется для создания нового файла или открытия существующего файла на C. Функция fopen определена в заголовочном файле stdio.h.

Теперь давайте посмотрим на синтаксис создания нового файла или открытия файла

Это общий синтаксис как для открытия, так и для создания файла в C.

Параметры

file_name — это строка, указывающая имя файла, который нужно открыть или создать с помощью метода fopen. режим: это строка (обычно один символ), указывающая режим, в котором файл должен быть открыт. Существуют различные режимы открытия файла в C, мы узнаем обо всех них позже в этой статье.

Когда будет создан файл?

Функция fopen создаст новый файл, если не найдет ни одного файла с указанным именем в указанном месте. В противном случае, если файл будет найден, он будет открыт в указанном режиме.

Давайте рассмотрим пример, который прояснит концепцию. Предположим, мы открываем файл с именем hello.txt с помощью функции fopen. Следующим будет утверждение,

Это приведет к поиску файла с именем hello.txt в текущем каталоге. Если файл существует, он откроет его, в противном случае он создаст новый файл с именем «hello.txt» и откроет его в режиме записи (указывается с помощью «w»).

Теперь давайте рассмотрим все типы режимов, которые доступны нам для чтения или записи файла на языке C, и посмотрим фрагменты кода, в которых показаны примеры выполнения кода.

Mode = «r» — открыть для чтения, в этом режиме файл будет открыт только для чтения, т. е. содержимое можно только просмотреть, ничего другого, как редактирование, в него нельзя вносить.

Этот режим не может создать новый файл, и open() возвращает NULL, если мы попытаемся создать новый файл, используя этот режим.

Пример

Вывод

Мы создали файл с именем hello.txt в нашем текущем каталоге, но если мы попытаемся получить доступ к другому файлу, то получим «Файл отсутствует! невозможно создать новый файл, используя режим r» в качестве вывода.

Mode = «rb» — открыть для чтения в бинарном режиме, в этом режиме файл будет открываться только для чтения в бинарном режиме, т.е. содержимое можно будет только просмотреть, и ничего другого, как редактирование, сделать с ним нельзя.

Этот режим не может создать новый файл, и open() возвращает NULL, если мы попытаемся создать новый файл, используя этот режим.

Пример

Вывод

Файл отсутствует! невозможно создать новый файл в режиме rb

Mode = «w» — открыт только для записи, в этом режиме файл, если он присутствует в текущем каталоге, будет открыт только для записи, т. е. операция чтения не может быть выполнена. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для записи.

Если мы откроем файл, содержащий текст, содержимое будет перезаписано.

Пример

Вывод

Здесь видно, что мы попытались открыть файл «helo.txt», которого нет в каталоге, однако функция вернула сообщение об успешном завершении, поскольку она создала файл с именем «helo.txt».

Mode = «wb» — открыт для записи в двоичном режиме, этот режим откроет файл, если он присутствует в текущем каталоге, для записи в двоичном режиме, т. е. операция чтения не может быть выполнена. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для записи в двоичном режиме.

Если мы откроем файл, содержащий текст, содержимое будет перезаписано.

Пример

Вывод

Файл успешно открыт при записи в двоичном режиме или создан новый файл

Mode = «a» — открыт только для добавления, в этом режиме файл, если он присутствует в текущем каталоге, будет открыт только для записи, т. е. операция чтения не может быть выполнена. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для записи. Если мы откроем файл, содержащий текст, содержимое не будет перезаписано; вместо этого новый текст будет добавлен после существующего текста в файле.

Пример

Вывод

Mode = «ab» — ​​открыть для добавления в двоичном формате, этот режим откроет файл, если он присутствует в текущем каталоге, только для записи в двоичном формате, т. е. операция чтения не может быть выполнена. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для записи в двоичном формате.

Если мы откроем файл, содержащий текст, содержимое не будет перезаписано; вместо этого новый текст будет добавлен после существующего текста в файле.

Пример

Вывод

Mode = «r+» — открыт для чтения и записи, этот режим открывает файл как для чтения, так и для записи, т. е. с файлом могут выполняться операции чтения и записи.

Этот режим не может создать новый файл, и open() возвращает NULL, если мы попытаемся создать новый файл, используя этот режим.

Если мы откроем файл, содержащий текст, и напишем что-нибудь, содержимое будет перезаписано.

Пример

Вывод

Мы создали файл с именем hello.txt в нашем текущем каталоге, но если мы попытаемся получить доступ к другому файлу, мы получим «Файл отсутствует! невозможно создать новый файл, используя режим r+» в качестве вывода.

Mode = «rb+» − открыть для чтения в бинарном режиме, этот режим откроет файл для чтения только в бинарном режиме, т.е. содержимое можно только просмотреть и никакие другие изменения, такие как редактирование, сделать с ним нельзя.

Этот режим не может создать новый файл, и open() возвращает NULL, если мы попытаемся создать новый файл, используя этот режим.

Если мы откроем файл, содержащий текст, и напишем что-нибудь, содержимое будет перезаписано.

Пример

Вывод

Mode = «w» — открыт для записи и чтения, этот режим открывает файл, если он присутствует в текущем каталоге, как для записи, так и для чтения. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для чтения и записи.

Если мы откроем файл, содержащий текст, содержимое будет перезаписано.

Пример

Вывод

Здесь видно, что мы попытались открыть файл «helo.txt», которого нет в каталоге, однако функция вернула сообщение об успешном завершении, поскольку она создала файл с именем «helo.txt».

Mode = «wb+» : открыть для записи и чтения в двоичном режиме, этот режим откроет файл, если он присутствует в текущем каталоге, для записи и чтения в

бинарный режим. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для чтения и записи в двоичном режиме. Если мы откроем файл, содержащий текст, содержимое будет перезаписано.

Пример

Вывод

Mode = «a+» — открыть для чтения и добавления, в этом режиме файл, если он присутствует в текущем каталоге, будет открыт как для чтения, так и для записи. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для чтения и записи.

Если мы откроем файл, содержащий текст, содержимое не будет перезаписано; вместо этого новый текст будет добавлен после существующего текста в файле.

Пример

Вывод

Файл успешно открыт в режиме чтения-добавления или создан новый файл

Mode = «ab+» – открыть для чтения и добавления в двоичном формате. В этом режиме файл, если он присутствует в текущем каталоге, будет открыт как для чтения, так и для записи в двоичном формате. Если файл отсутствует в текущем каталоге, программа создаст новый файл и откроет его для чтения и записи в двоичном виде. Если мы откроем файл, содержащий текст, содержимое не будет перезаписано; вместо этого новый текст будет добавлен после существующего текста в файле.

Пример

Вывод

Чтение данных из существующего файла

Мы можем прочитать содержимое файла в c, используя функции fscanf() и fgets() и fgetc(). Все они используются для чтения содержимого файла. Давайте посмотрим, как работает каждая функция —

фсканф()

Функция fscanf() используется для чтения набора символов, т. е. строк из файла. Он возвращает EOF, когда все содержимое файла прочитано им.

Синтаксис

Параметры

Пример

Вывод

fgets()

Функция fget() в C используется для чтения строки из потока.

Синтаксис

Параметр

Пример

Вывод

fgetc()

Функция fgetc() в C используется для возврата одного символа из файла. Он получает символ из файла и возвращает EOF в конце файла.

Синтаксис

Параметр

Пример

Вывод

Запись данных в файл на C

Мы можем записать данные в файл на C, используя функции fprintf(), fputs(), fputc(). Все они используются для записи содержимого в файл.

Давайте посмотрим, как работает каждая функция –

fprintf()

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

Синтаксис

Параметры

Пример

Вывод

фпутф()

Функция fputf() в C может использоваться для записи в файл. Используется для записи строки (символьной строки) в файл.

Синтаксис

Параметры

Пример

Вывод

фпутк()

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

Синтаксис

Параметры

Пример

Вывод

fclose()

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

В этом руководстве вы узнаете об обработке файлов в C.Вы научитесь обрабатывать стандартный ввод-вывод в C, используя fprintf(), fscanf(), fread(), fwrite(), fseek() и т. д. с помощью примеров.

Файл — это контейнер на компьютерных запоминающих устройствах, используемый для хранения данных.

Зачем нужны файлы?

  • При завершении программы все данные теряются. Сохранение в файле сохранит ваши данные, даже если программа завершит работу.
  • Если вам нужно ввести большое количество данных, ввод их всех займет много времени.
    Однако, если у вас есть файл, содержащий все данные, вы можете легко получить доступ к содержимому файла с помощью нескольких команд на языке C.
  • Вы можете легко перенести свои данные с одного компьютера на другой без каких-либо изменений.

Типы файлов

При работе с файлами необходимо знать два типа файлов:

1. Текстовые файлы

Текстовые файлы — это обычные файлы .txt. Вы можете легко создавать текстовые файлы с помощью любых простых текстовых редакторов, таких как Блокнот.

Когда вы откроете эти файлы, вы увидите все содержимое файла в виде обычного текста. Вы можете легко редактировать или удалять содержимое.

Они требуют минимальных усилий для обслуживания, легко читаются, обеспечивают наименьшую безопасность и занимают больше места для хранения.

2. Бинарные файлы

Двоичные файлы — это в основном файлы .bin на вашем компьютере.

Вместо того, чтобы хранить данные в виде обычного текста, они хранят их в двоичной форме (0 и 1).

Они могут содержать больший объем данных, их нелегко читать, и они обеспечивают более высокий уровень безопасности, чем текстовые файлы.

Операции с файлами

В C вы можете выполнять четыре основные операции с файлами, текстовыми или двоичными:

  1. Создание нового файла
  2. Открытие существующего файла
  3. Закрытие файла
  4. Чтение и запись информации в файл

Работа с файлами

При работе с файлами необходимо объявить указатель типа файл. Это объявление необходимо для связи между файлом и программой.

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

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

Синтаксис открытия файла в стандартном вводе-выводе:

  • Предположим, что файл newprogram.txt не существует в папке E:\cprogram. Первая функция создает новый файл с именем newprogram.txt и открывает его для записи в соответствии с режимом 'w'.
    Режим записи позволяет создавать и редактировать (перезаписывать) содержимое файла.
  • Теперь предположим, что второй двоичный файл oldprogram.bin существует в папке E:\cprogram. Вторая функция открывает существующий файл для чтения в бинарном режиме 'rb'.
    Режим чтения позволяет только читать файл, вы не можете записывать в файл.

Закрытие файла

Файл (как текстовый, так и двоичный) должен быть закрыт после чтения/записи.

Закрытие файла выполняется с помощью функции fclose().

Здесь fptr — это указатель файла, связанный с файлом, который нужно закрыть.

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

Для чтения и записи в текстовый файл мы используем функции fprintf() и fscanf().

Это просто версии файлов printf() и scanf() . Единственное отличие состоит в том, что fprintf() и fscanf() ожидают указатель на структуру FILE.

Пример 1. Запись в текстовый файл

Эта программа получает номер от пользователя и сохраняет его в файле program.txt .

После того, как вы скомпилируете и запустите эту программу, вы увидите текстовый файл program.txt, созданный на диске C вашего компьютера. Когда вы откроете файл, вы увидите введенное целое число.

Пример 2. Чтение из текстового файла

Эта программа считывает целое число из файла program.txt и выводит его на экран.

Если вы успешно создали файл из примера 1, запустив эту программу, вы получите введенное целое число.

Другие функции, такие как fgetchar() , fputc() и т. д., можно использовать аналогичным образом.

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

Функции fread() и fwrite() используются для чтения и записи в файл на диске соответственно в случае двоичных файлов.

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

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

  1. адрес данных для записи на диск
  2. размер данных для записи на диск
  3. количество таких данных
  4. указатель на файл, в который вы хотите записать.

Пример 3. Запись в двоичный файл с помощью fwrite()

В этой программе мы создаем новый файл program.bin на диске C.

Мы объявляем структуру threeNum с тремя числами — n1, n2 и n3 и определяем ее в основной функции как num.

Теперь внутри цикла for мы сохраняем значение в файле с помощью fwrite() .

Первый параметр принимает адрес num, а второй параметр принимает размер структуры threeNum .

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

Наконец, мы закрываем файл.

Чтение из двоичного файла

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

Пример 4. Чтение из двоичного файла с помощью функции fread()

В этой программе вы читаете один и тот же файл program.bin и перебираете записи одну за другой.

Проще говоря, вы читаете одну запись threeNum размера threeNum из файла, на который указывает *fptr, в структуру num .

Вы получите те же записи, что и в примере 3.

Получение данных с помощью fseek()

Если у вас есть много записей в файле и вам нужно получить доступ к записи в определенной позиции, вам нужно пройтись по всем записям перед этим, чтобы получить запись.

Это приведет к потере большого количества памяти и рабочего времени. Более простой способ получить необходимые данные можно с помощью fseek() .

Как следует из названия, fseek() ищет курсор для данной записи в файле.

Синтаксис fseek()

Первый поток параметров — это указатель на файл. Второй параметр — это позиция искомой записи, а третий параметр указывает место, где начинается смещение.

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

Для создания файла в программе на языке C используется следующий синтаксис,

В приведенном выше синтаксисе файл представляет собой структуру данных, определенную в стандартной библиотеке.

fopen — это стандартная функция, которая используется для открытия файла.

  • Если файл отсутствует в системе, он создается, а затем открывается.
  • Если файл уже присутствует в системе, он напрямую открывается с помощью этой функции.

fp — это указатель файла, указывающий на тип файла.

Каждый раз, когда вы открываете или создаете файл, вы должны указать, что вы собираетесь делать с файлом. Файл в программировании на языке C может быть создан или открыт для чтения/записи. Режим используется, чтобы указать, хотите ли вы открыть файл для какой-либо из указанных ниже целей. Ниже приведены различные типы режимов программирования на языке C, которые можно использовать при работе с файлом.

режимописание
rоткрывает текстовый файл в режиме чтения
wоткрывает или создает текстовый файл в режиме записи.
aоткрывает текстовый файл в режиме добавления
r+открывает текстовый файл как в режиме чтения, так и в режиме записи
w+открывает текстовый файл как в режиме чтения, так и в режиме записи
a+открывает текст файл в режиме чтения и записи
rbоткрывает двоичный файл в режиме чтения
wbоткрывает или создает двоичный файл в режиме записи
abоткрывает двоичный файл в режиме добавления
rb+открывает двоичный файл как в режиме чтения, так и в режиме записи
wb+ открывает двоичный файл как в режиме чтения, так и в режиме записи
ab+открывает двоичный файл в режиме чтения и записи
Режим файла Описание
r Открыть файл для чтения. Если файл находится в режиме чтения, то никакие данные не удаляются, если файл уже присутствует в системе.
w Открыть файл для записи . Если файл находится в режиме записи, то создается новый файл, если файл вообще не существует. Если файл уже присутствует в системе, то все данные внутри файла усекаются, и он открывается для записи.
a Откройте файл в
режиме добавления. Если файл находится в режиме добавления, то файл открывается. Содержимое файла не меняется.
r+ открыть для чтения и записи с начала
w+ открыть для чтения и записи, перезаписать файл
a+ открыть для чтения и записи, дополнить файл

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

Файл создается в той же папке, в которой вы сохранили свой код.

Вы можете указать путь, по которому вы хотите создать файл

Как закрыть файл

Всегда следует закрывать файл после завершения операций над файлом. Это означает, что содержимое и ссылки на файл удалены. Это предотвращает случайное повреждение файла.

«C» предоставляет функцию fclose для выполнения операции закрытия файла. Синтаксис fclose следующий:

Функция fclose принимает в качестве аргумента указатель файла. Затем файл, связанный с указателем файла, закрывается с помощью функции fclose. Возвращает 0, если закрытие прошло успешно, и EOF (конец файла), если при закрытии файла произошла ошибка.

После закрытия файла тот же указатель файла можно использовать и с другими файлами.

В программировании на языке C файлы автоматически закрываются при завершении программы. Закрытие файла вручную путем написания функции fclose является хорошей практикой программирования.

Запись в файл

В C при записи в файл символы новой строки "\n" должны добавляться явно.

Библиотека stdio предлагает необходимые функции для записи в файл:

  • fputc(char, file_pointer): записывает символ в файл, на который указывает file_pointer.
  • fputs(str, file_pointer): записывает строку в файл, на который указывает file_pointer.
  • fprintf(file_pointer, str, variable_lists): печатает строку в файл, на который указывает file_pointer. Строка может дополнительно включать спецификаторы формата и список переменных variable_lists.

Приведенная ниже программа показывает, как выполнить запись в файл:

Функция fputc():

Приведенная выше программа записывает один символ в файл fputc_test.txt, пока не дойдет до символа следующей строки «\n», который указывает на то, что предложение было успешно записано. Процесс заключается в том, чтобы взять каждый символ массива и записать его в файл.

  1. В приведенной выше программе мы создали и открыли файл с именем fputc_test.txt в режиме записи и объявили нашу строку, которая будет записана в файл.
  2. Мы выполняем посимвольную операцию записи, используя цикл for, и помещаем каждый символ в наш файл до тех пор, пока не встретится символ «\n», после чего файл закрывается с помощью функции fclose.

fputs() Функция:

  1. В приведенной выше программе мы создали и открыли файл с именем fputs_test.txt в режиме записи.
  2. После того, как мы выполним операцию записи с помощью функции fputs(), записав три разные строки
  3. Затем файл закрывается с помощью функции fclose.

Функция fprintf():

  1. В приведенной выше программе мы создали и открыли файл с именем fprintf_test.txt в режиме записи.
  2. После выполнения операции записи с помощью функции fprintf() путем записи строки файл закрывается с помощью функции fclose.

Чтение данных из файла

Есть три разные функции, предназначенные для чтения данных из файла

  • fgetc(file_pointer): возвращает следующий символ из файла, на который указывает указатель файла. Когда конец файла достигнут, EOF отправляется обратно.
  • fgets(buffer, n, file_pointer): считывает n-1 символов из файла и сохраняет строку в буфере, к которому в качестве последнего добавляется символ NULL «\0».
  • fscanf(указатель_файла, спецификаторы_переменных, адреса_переменных): используется для разбора и анализа данных. Он считывает символы из файла и присваивает ввод списку указателей переменных variable_addresses, используя спецификаторы преобразования. Имейте в виду, что, как и в случае с scanf, fscanf прекращает чтение строки при обнаружении пробела или новой строки.

Следующая программа демонстрирует чтение из файла fputs_test.txt с использованием функций fgets(),fscanf() и fgetc() соответственно:

Результат:

  1. В приведенной выше программе мы открыли файл с именем «fprintf_test.txt», который был ранее написан с использованием функции fprintf() и содержит строку «Изучение C с Guru99». Мы читаем его с помощью функции fgets(), которая считывает строку за строкой, при этом размер буфера должен быть достаточным для обработки всей строки.
  2. Мы снова открываем файл, чтобы сбросить файл указателя на начало файла. Создайте различные строковые переменные для обработки каждого слова отдельно. Распечатайте переменные, чтобы увидеть их содержимое. Функция fscanf() в основном используется для извлечения и анализа данных из файла.
  3. Повторно откройте файл, чтобы сбросить файл указателя на начало файла. Считайте данные и распечатайте их из файла символ за символом, используя функцию getc(), пока не встретится оператор EOF
  4. После выполнения операции чтения файла с использованием разных вариантов мы снова закрыли файл с помощью функции fclose.

Интерактивное чтение и запись файлов с помощью getc и putc

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

Следующая программа демонстрирует функции обработки файлов в программировании на языке C:

Читайте также: