C Обработка файлов
Обработка файлов C
В этом руководстве вы узнаете об обработке файлов в C. Вы научитесь обрабатывать стандартный ввод-вывод в C, используя fprintf(), fscanf(), fread(), fwrite(), fseek() и т. д. с помощью примеры.
Файл – это контейнер на компьютерных запоминающих устройствах, используемый для хранения данных.
<час>Зачем нужны файлы?
- При завершении программы все данные теряются. Сохранение в файле сохранит ваши данные, даже если программа завершит работу.
- Если вам нужно ввести большое количество данных, ввод их всех займет много времени.
Однако если у вас есть файл, содержащий все данные, вы можете легко получить доступ к содержимому файла с помощью нескольких команд на языке C. - Вы можете легко перенести свои данные с одного компьютера на другой без каких-либо изменений.
Типы файлов
При работе с файлами следует знать о двух типах файлов:
- Текстовые файлы
- Двоичные файлы
1. Текстовые файлы
Текстовые файлы — это обычные файлы .txt. файлы. Вы можете легко создавать текстовые файлы с помощью любых простых текстовых редакторов, таких как Блокнот.
Когда вы откроете эти файлы, вы увидите все содержимое файла в виде обычного текста. Вы можете легко редактировать или удалять содержимое.
Они требуют минимальных усилий для обслуживания, легко читаются, обеспечивают наименьшую безопасность и занимают больше места для хранения.
2. Бинарные файлы
Двоичные файлы в основном имеют формат .bin. файлы на вашем компьютере.
Вместо того, чтобы хранить данные в виде простого текста, они хранят их в двоичной форме (0 и 1).
Они могут содержать больший объем данных, их нелегко прочитать, и они обеспечивают лучшую безопасность, чем текстовые файлы.
<час>Операции с файлами
В C вы можете выполнять четыре основные операции с файлами, текстовыми или двоичными:
- Создание нового файла
- Открытие существующего файла
- Закрытие файла
- Чтение и запись информации в файл
Работа с файлами
При работе с файлами нужно объявить указатель типа file. Это объявление необходимо для связи между файлом и программой.
01<час>
Открытие файла - для создания и редактирования
Открытие файла выполняется с помощью 04
функция, определенная в 17
файл заголовка.
Синтаксис открытия файла в стандартном вводе/выводе:
10пре>Например,
28
- Предположим, файл
29
не существует в местоположении36
. Первая функция создает новый файл с именем49
. и открывает его для записи в режиме 'w' .
Режим записи позволяет создавать и редактировать (перезаписывать) содержимое файла. - Теперь предположим, что второй двоичный файл
56
существует в местоположении67
. Вторая функция открывает существующий файл для чтения в бинарном режиме 'rb' .
Режим чтения позволяет только читать файл, вы не можете записывать в файл.
Режим | Значение режима | Во время отсутствия файла |
---|---|---|
72 | Открыть для чтения. | Если файл не существует, 80 возвращает NULL. |
99 | Открыть для чтения в бинарном режиме. | Если файл не существует, 108 возвращает NULL. |
112 | Открыть для записи. | Если файл существует, его содержимое перезаписывается. Если файл не существует, он будет создан. |
121 | Открыть для записи в двоичном режиме. | Если файл существует, его содержимое перезаписывается. Если файл не существует, он будет создан. |
136 | Открыть для добавления. Данные добавляются в конец файла. | Если файл не существует, он будет создан. |
140 | Открыть для добавления в двоичном режиме. Данные добавляются в конец файла. | Если файл не существует, он будет создан. |
154 | Открыт как для чтения, так и для записи. | Если файл не существует, 166 возвращает NULL. |
175 | Открыт как для чтения, так и для записи в двоичном режиме. | Если файл не существует, 187 возвращает NULL. |
198 | Открыт как для чтения, так и для записи. | Если файл существует, его содержимое перезаписывается. Если файл не существует, он будет создан. |
201 | Открыт как для чтения, так и для записи в двоичном режиме. | Если файл существует, его содержимое перезаписывается. Если файл не существует, он будет создан. |
215 | Открыть как для чтения, так и для добавления. | Если файл не существует, он будет создан. |
225 | Открыть как для чтения, так и для добавления в двоичном режиме. | Если файл не существует, он будет создан. |
Закрытие файла
Файл (как текстовый, так и двоичный) должен быть закрыт после чтения/записи.
Закрытие файла выполняется с помощью 237
функция.
32
Здесь 249
указатель файла, связанный с файлом, который нужно закрыть.
Чтение и запись в текстовый файл
Для чтения и записи в текстовый файл мы используем функции 258
и 263
Это всего лишь файловые версии 276
. и 280
. Единственное отличие состоит в том, что 294
и 308
ожидает указатель на структуру FILE.
Пример 1. Запись в текстовый файл
40
Эта программа берет число от пользователя и сохраняет в файле 316
.
После того, как вы скомпилируете и запустите эту программу, вы увидите текстовый файл 324
созданный на диске C вашего компьютера. Когда вы откроете файл, вы увидите введенное целое число.
Пример 2. Чтение из текстового файла
58
Эта программа считывает целое число, присутствующее в 331
файл и распечатывает его на экране.
Если вы успешно создали файл из примера 1 , запустив эту программу, вы получите введенное целое число.
Другие функции, такие как 342
, 352
и т. д. можно использовать аналогичным образом.
Чтение и запись в двоичный файл
Функции 362
и 373
используются для чтения и записи в файл на диске соответственно в случае двоичных файлов.
Запись в двоичный файл
Для записи в бинарный файл нужно использовать 380
функция. Функции принимают четыре аргумента:
- адрес данных для записи на диск
- размер данных для записи на диск
- количество таких данных
- указатель на файл, в который вы хотите записать.
61<час>
Пример 3. Запись в двоичный файл с помощью fwrite()
73
В этой программе мы создаем новый файл 399
на диске C.
Объявляем структуру 400
с тремя числами - n1, n2 и n3 , и определите его в основной функции как num.
Теперь внутри цикла for мы сохраняем значение в файл, используя 416
.
Первый параметр принимает адрес num. а второй параметр принимает размер структуры 428
.
Поскольку мы вставляем только один экземпляр num , третий параметр — 438
. И последний параметр 441
указывает на файл, в котором мы храним данные.
Наконец, мы закрываем файл.
<час>Чтение из бинарного файла
Функция 452
также принимать 4 аргумента, похожих на 463
действовать, как указано выше.
80<час>
Пример 4. Чтение из двоичного файла с помощью функции fread()
90
В этой программе вы читаете тот же файл 471
и перебирать записи одну за другой.
Проще говоря, вы читаете один 486
запись 499
размер из файла, на который указывает *fptr в структуру num .
Вы получите те же записи, что и в Примере 3. .
<час>Получение данных с помощью fseek()
Если у вас есть много записей в файле и вам нужно получить доступ к записи в определенной позиции, вам нужно пройтись по всем записям перед этим, чтобы получить запись.
Это приведет к потере большого количества памяти и рабочего времени. Более простой способ получить необходимые данные можно с помощью 507
.
Как следует из названия, 514
ищет курсор к данной записи в файле.
Синтаксис fseek()
107
Первый поток параметров — это указатель на файл. Второй параметр — это позиция искомой записи, а третий параметр указывает место, где начинается смещение.
Откуда | Значение |
---|---|
521 | Начинает смещение с начала файла. |
531 | Начинает смещение с конца файла. |
545 | Начинает смещение от текущего положения курсора в файле. |
Пример 5:fseek()
115
Эта программа начнет чтение записей из файла 551
в обратном порядке (от последнего к первому) и печатает его.
Язык C