Программирование · 5 min read · Oct 09, 2025

Изучение C/C++ шаг за шагом - Страница 12

12. Постепенное изучение CorC++ — Программирование на C - Файлы

Обработка файлов

Введение

Давайте найдем вывод следующей программы.

| | |

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

| | |

Вышеуказанные две программы одинаковы, но вторая программа содержит выделенное выражение ( FILE *fp = fopen(“stud.dat”, “a+”);) и несколько изменений, таких как ‘f printf’, ‘ fp’. Включены только несколько изменений. Эти изменения влияют на передачу данных с консоли на диск в файл stud.dat. Этот процесс известен как управление файлами/организация файлов.

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

| | |

На самом деле обработка файлов включает в себя множество операций, а также методов для реализации. Вот фактический процесс обработки файлов.

Обработка файлов

Как правило, каждая программа должна представлять полученные значения на экране (1-я программа это иллюстрирует). Но эти значения удаляются из памяти, когда программа завершается. Если мы хотим сохранить записи навсегда, сохраните их в файле. Каждый файл имеет несколько операций, вот несколько;

| | |

| | |

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

fopenОткрывает поток filename в режиме mode & если успешно, возвращает указатель на вновь открытый поток; или Null в противном случае.
Синтаксис **FILE fopen(const char filename, const char *mode);

| Пример | FILE fp = fopen(“stud.dat”, “r”);   /  Чтение из файла  /
FILE
fp = fopen(“emp.dat”, “w”); /  Запись в файл  /
FILE fp = fopen(“emp.dat”, “a+”);           /  Чтение и запись в файл / | | | Режим:
Строка режима, используемая в вызовах fopen, является одним из следующих значений:
Режим     Описание r Открыть только для чтения w Создать для записи (если файл с таким именем уже существует, он будет перезаписан). a Добавить; открыть для записи в конец файла или создать для
записи, если файл не существует.
r+ Открыть существующий файл для обновления (чтение и запись) w+ Создать новый файл для обновления (чтение и запись).
Если файл с таким именем уже существует, он будет перезаписан.
a+ Открыть для добавления; открыть для обновления в конце файла или
создать, если файл не существует. Чтобы указать, что данный файл открывается или создается в текстовом режиме,
добавьте “
t “ к строке ( rt, w+t,*
и т.д.).

Чтобы указать двоичный режим, добавьте “ b “ к строке ( wb, a+b, и т.д.). | | fclose | Закрывает файл, на который указывает fp & возвращает 0 при успехе, EOF возвращается в случае ошибки | | Синтаксис | Int fclose(FILE *fp); | | Пример | Fclose(fp);  fclose(stud);   fcloseall(); | | fprintf | Отправляет форматированный вывод в поток. Использует те же спецификаторы формата, что и printf, но отправляет вывод в указанный поток. Возвращает количество байт вывода или EOF в случае ошибки. | | Синтаксис | Fprintf(fptr, “Control String”, list); | | Пример | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Эта функция используется для чтения форматированных данных из указанного файла. | | Синтаксис: | Fscanf(fptr, “Control String”, list); | | Пример | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite добавляет указанное количество одинаковых по размеру элементов данных в выходной файл. | | Синтаксис: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Аргумент  Что это/что делает Ptr Указатель на любой объект; данные, записанные, начинаются с ptr Size Длина каждого элемента данных N Количество элементов данных, которые будут добавлены stream Указывает выходной файл
Общее количество записанных байт составляет  (
n size) | | fread | Fread извлекает указанное количество одинаковых по размеру элементов данных из входного файла. | | Синтаксис | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Аргумент  Что это/что делает Ptr Указатель на любой объект; данные, записанные, начинаются с ptr size Длина каждого элемента данных n Количество элементов данных, которые будут добавлены stream Указывает выходной файл
Общее количество записанных байт составляет (
n
size) | | rewind
| Перемещает указатель файла к началу потока | | Синтаксис | Void rewind(FILE stream);
Пример.      fewind(fp);
Rewind(stream) эквивалентен fseek(stream, 0L, SEEK_SET)
за исключением того, что rewind очищает индикаторы конца файла и ошибки, в то время как fseek очищает только индикатор конца файла. После rewind следующая операция на обновленном файле может быть либо вводом, либо выводом. | |
fseek | Указатель файла для потока располагается на смещении, рассчитанном от позиции, указанной whence. Смещение может быть нулевым, отрицательным или положительным. Определенные символы SEEK_CUR, SEEK_SET и SEEK_END используются в качестве спецификаторов whence для указания текущей позиции. BOF и EOF соответственно. Возвращает 0 при успехе или ненулевое значение при ошибке. | | Синтаксис | Int fssek(FILE
stream, long offset, int whence); | | ftell
| Возвращает текущую позицию указателя файла при успехе или отрицательное значение при ошибке. | | Синтаксис | Long ftell(FILE *stream); | | feof | Это макрос, который возвращает ненулевое значение, если конец файла был достигнут в потоке. | | Синтаксис | Int feof(FILE *stream); | | eof | Проверяет, находится ли маркер позиции в файле, заданный его дескриптором, в конце файла. Если да, возвращает 0, 1 возвращается, если маркер позиции НЕ находится в конце файла, и ошибка указывается установкой errno и возвращаемым значением -1. | | Синтаксис | Int eof(int handle); | | fgets /
fputs | Функция fgets/fputs получает/выводит строку (размером n байт) в файл, на который указывает поток, и возвращает конец файла при ошибке. | | Синтаксис | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Синтаксис | Читает/записывает символ из потока.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Это эквивалентно вышеуказанным fgetc/fputc. |

Напишите программу для чтения данных о студенте и сохранения их в файле данных.

| | / Программа для создания файла данных о студенте /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Введите номер студента        “); scanf(“%d”, &sno);
printf(“Введите имя студента          “); scanf(“%s”, name);
printf(“Введите 3 оценки по предметам      “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\nХотите продолжить… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |

Напишите программу для извлечения данных из файла данных о студенте.

| | / Программа для извлечения данных из файла данных о студенте /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“Записи студентов следующие….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.