Файловий ввід/вивід мови C — це розділ мови C про роботу з файлами за допомогою спеціальних функцій, доступ до яких надає заголовний файл <stdio.h> через їхні прототипи.

У середовищі Unix, з якого бере свій початок C, файл розглядається як неперервна послідовність байтів, кожен з яких може бути прочитаний окремо. Це відповідає структурі, яку використовує і мова C. Система вводу/виводу мови C використовує поняття потоку — абстракцію, яка дозволяє програмісту працювати з файлом. Потоки є двох видів: текстовий — послідовність символів, бінарний — послідовність байтів.

Використовуваний тип FILE FILE — це структура, в якій зберігається інформація про файл: його ім'я, статус, поточне положення курсору та інші. Вказівник файлу представляє собою вказівник на цю структуру. Він описує файл. У деякій літературі також вживається термін дескриптор файлу.

Приклад оголошення вказівника файлу:FILE *myFile;

Використовувані макроси МакросЗначенняNULLНульовий вказівник, еквівалентний 0EOFКінець файлу, рівний -1FOPEN_MAXКількість файлів, які можуть бути відкриті одночасно

Відкриття та закриття файлу за допомогою функцій fopen() та fclose() Функція fopen() дозволяє відкрити файл. Першим аргументом цієї функції є рядок, який містить назву файлу, а другий аргумент — рядок режиму, у якому він повинен бути відкритий. Функція повертає вказівник файлу .FILE *fopen(const char *fileName, const char mode);Якщо під час відкриття файлу виникне помилка, то повертається NULL. РежимОписrВідкрити файл для читанняwСтворити пустий файл для запису. Якщо такий файл вже існує, то його вміст стираєтьсяaДописати дані у кінець файлу. Створення нового файлу, якщо вказаний не існуєr+Відкрити файл для читання і запису. Файл повинен існуватиw+Створити пустий файл для читання і запису. Якщо такий файл вже існує, то його вміст стираєтьсяa+Відкрити файл для читання і запису з додавання даних у кінець існуючого файлу, або створення нового пустого файлу. Читати можна весь файл, але добавляти дані можна тільки у кінецьrbВідкрити бінарний файл для читанняwbСтворити бінарний файл для записуabДодати інформацію в кінець бінарного файлуr+bВідкрити бінарний файл для читання і записуw+bСтворити бінарний файл для читання і записуa+bДодати інформацію у кінець бінарного файлу, або створити бінарний файл для читання і запису Функція fclose() закриває потік, раніше відкритий функцією fopen(). Помилка, яка може виникнути при закритті файлу, може спричинити втрату даних чи знищення файлу .int fclose(FILE *filePointer);filePointer — вказівник файлу, отриманий з функції fopen().

Приклад:#include <stdio.h> // для функцій роботи з файлами

int main() { FILE *myFile = fopen("example.txt", "r"); // відкриття файлу для читання

if (myFile == NULL) { // перевірка на помилки printf("Error!\n"); return -1; } fclose(myFile); // закриття файлу return 0; }

Читання і запис

Функції fputc() та fgetc() Функція fputc() використовується для запису символу.int fputc(int symbol, FILE *filePointer);Функція fgetc() використовується для читання символу.int fgetc(FILE *filePointer);Коли, при читанні символів, досягається кінець файлу, функція fgetc() повертає значення EOF.

Приклад:#include <stdio.h> // для функцій роботи з файлами

int main() { FILE *myFile = fopen("example.txt", "a+"); // для читання і запису char symbol;

if (myFile == NULL) { // перевірка на помилки printf("Error!\n"); return -1; } // почергове зчитування символів do { symbol = fgetc(myFile); putchar(symbol); } while (symbol != EOF);

printf("\nEnter some symbol: "); scanf("%c", &symbol); fputc(symbol, myFile); // запис символу fclose(myFile); // закриття файлу return 0; }

Функції fputs() і fgets() Функція fputs() записує в потік filePointer рядок, на який вказує перший аргумент str. При виникненні помилки повертає EOF.int fputs(const char *str, FILE *filePointer);Функція fgets() зчитує рядок заданої довжини length, або поки не зустріне символ переходу. Повертає вказівник на введений рядок в разі успішного виконання, або NULL у разі помилки. int *fgets(char *str, int length, FILE *filePointer);Приклад:#include <stdio.h> // для функцій роботи з файлами

int main() { FILE *myFile = fopen("example.txt", "a+"); // відкриття для запису і читання

if (myFile == NULL) { // перевірка на помилки printf("Error!\n"); return -1; } // зчитування рядка char data; fgets(data, 100, myFile); printf("%s", data);

// запис рядка у файл char str; char symbol; unsigned i = 0; printf("\nEnter some string: "); for (; ((symbol = getchar()) != '\n') && (i < 99); ++i) { str[i] = symbol; } str[i] = '\0'; fputs(str, myFile); // запис у файл fclose(myFile); // закриття файлу return 0; }

Видалення файлу Для видалення файлу використовується функція remove(), яка єдиним аргументом приймає назву файлу. У разі успішного виконання повертає 0, а в іншому випадку — значення відмінне від нуля.int remove(const char *fileName);

Примітки