Ввод-вывод файлов в C: создание, открытие, чтение, запись и закрытие файлов
Обзор управления файлами в C
В C стандартная библиотека stdio.h предлагает полный набор функций для работы с постоянными данными на диске. Освоив эти инструменты, вы сможете надежно создавать, читать, записывать и закрывать файлы, обеспечивая целостность данных и стабильность программы.
Ключевые функции работы с файлами
| Функция | Назначение |
|---|---|
fopen() | Открыть существующий файл или создать новый. |
fclose() | Закрыть открытый файл и освободить ресурсы. |
fprintf() | Записать форматированный текст в файл. |
fscanf() | Прочитать форматированные данные из файла. |
getc() | Получить один символ из файла. |
putc() | Записать один символ в файл. |
fgets() | Прочитать строку целиком в буфер. |
fputs() | Записать строку в файл без форматирования. |
fseek() | Переместить указатель файла в указанную позицию. |
ftell() | Получить текущую позицию указателя файла. |
rewind() | Сбросить указатель файла в начало. |
Режимы файлов
| Режим | Описание |
|---|---|
"r" | Открыть для чтения; ошибка, если файл не существует. |
"w" | Открыть для записи; усекает существующий или создает новый. |
"a" | Открыть для дозаписи; записи добавляются в конец файла. |
"r+" | Открыть для чтения и записи с начала. |
"w+" | Открыть для чтения и записи; усекает существующий файл. |
"a+" | Открыть для чтения и записи; дозаписывает новые данные. |
Создание файла
Чтобы создать или открыть файл, сначала объявите указатель на файл, затем вызовите fopen() с нужным именем файла и режимом:
FILE *fp; fp = fopen("data.txt", "w");
Если файл не существует, fopen() создает его. Если существует, режим определяет, сохраняется ли содержимое или перезаписывается.
Можно также указать абсолютный путь:
fp = fopen("D:/data.txt", "w");
Иллюстрации шага создания файла:


Закрытие файла
После завершения всех файловых операций всегда вызывайте fclose() для освобождения дескриптора файла и сброса буферов:
fp = fopen("data.txt", "r"); ... fclose(fp);
Функция возвращает 0 при успехе и EOF при ошибке. Хотя операционная система автоматически закрывает файлы при выходе из программы, явное закрытие считается лучшей практикой.
Запись в файл
При записи не забывайте явно добавлять символы новой строки (\n) там, где нужно. Ниже самые распространенные функции записи:
fputc(char, FILE*)— записать один символ.fputs(const char*, FILE*)— записать null-терминированную строку.fprintf(FILE*, const char*, …)— записать форматированный вывод.
Пример: fputc()
#include <stdio.h> int main() { int i; FILE *fptr; const char *str = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); for (i = 0; str[i] != '\n'; i++) { fputc(str[i], fptr); } fclose(fptr); return 0; }
Файл fputc_test.txt содержит текст:

Пример: fputs()
#include <stdio.h> int main() { FILE *fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return 0; }
Результирующий файл fputs_test.txt:

Пример: fprintf()
#include <stdio.h> int main() { FILE *fptr = fopen("fprintf_test.txt", "w"); fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
Результирующий файл fprintf_test.txt:

Чтение из файла
Три основные функции чтения данных:
fgetc(FILE*)— вернуть следующий символ.fgets(char*, int, FILE*)— прочитать доn-1символов в буфер.fscanf(FILE*, const char*, …)— разобрать форматированный ввод.
Ниже приведена полная демонстрация, читающая fprintf_test.txt всеми тремя методами:
#include <stdio.h> int main() { FILE *fp; char buffer[50], c; fp = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, fp); printf("%s\n", buffer); fclose(fp); fp = fopen("fprintf_test.txt", "r"); printf("----read and parse data----\n"); char str1[10], str2[2], str3[20], str4[2]; fscanf(fp, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); fclose(fp); fp = fopen("fprintf_test.txt", "r"); printf("----read the entire file----\n"); while ((c = fgetc(fp)) != EOF) { putchar(c); } fclose(fp); return 0; }
Вывод программы:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99

Интерактивный посимвольный ввод-вывод с getc и putc
Этот минимальный пример демонстрирует чтение пользовательского ввода, запись в файл и чтение обратно:
#include <stdio.h> int main() { FILE *fp; int c; printf("File Handling\n"); fp = fopen("demo.txt", "w"); while ((c = getchar()) != EOF) { putc(c, fp); } fclose(fp); printf("Data Entered:\n"); fp = fopen("demo.txt", "r"); while ((c = fgetc(fp)) != EOF) { putchar(c); } fclose(fp); return 0; }
Пример запуска:


Выводы
- Файл — постоянное хранилище на диске.
- Стандартная библиотека C предоставляет
fopen,fclose,fprintf,fscanfи смежные функции для надежной работы с файлами. - Всегда открывайте файл в правильном режиме для управления поведением чтения, записи или дозаписи.
- Явно закрывайте файлы для сброса буферов и освобождения системных ресурсов.
- Используйте
fgetcиputcдля простых символьных потоков, иfgets/fscanfдля построчного или форматированного ввода. - При записи не забывайте завершать строки
\n, если нужны переносы строк. - Правильная обработка ошибок (проверка
NULLуказателей и возвращаемых значений) необходима для надежных приложений.
Язык C
- Мастерство C# переменных и примитивных типов данных: полное руководство
- Ввод-вывод в C: scanf() и printf() — подробное руководство
- Работа с файлами в C: мастерство ввода-вывода с fopen, fprintf, fread и fseek
- Работа с файлами в Python: открытие, чтение, запись и управление
- Apacer запускает глобальные высокопроизводительные флеш-карты CV110-SD и CV110-MSD
- Apacer представляет промышленные SSD SV250: чтение 560 МБ/с, запись 520 МБ/с
- acceed EDAM-4200: Интегрированные I/O-модули для масштабируемой надежной передачи данных
- Сборка кабеля развязки I/O и адаптера для макетной платы Raspberry Pi — пошаговое руководство
- Освоение ввода-вывода файлов в C: создание, открытие и управление файлами
- Заголовочные файлы в C: типы, подключение и лучшие практики