C Files I/O: створення, відкриття, читання, запис і закриття файлу
C Керування файлами
Файл можна використовувати для зберігання великого обсягу постійних даних. Як і багато інших мов «C» надає такі функції керування файлами,
- Створення файлу
- Відкриття файлу
- Читання файлу
- Запис у файл
- Закриття файлу
Нижче наведено найважливіші функції керування файлами, доступні в C,
| функція | мета | |
|---|---|---|
| fopen() | Створення файлу або відкриття наявного файлу | |
| fclose () | Закриття файлу | |
| fprintf() | Запис блоку даних у файл | |
| fscanf () | Читання даних блоку з файлу | |
| getc () | Читає один символ із файлу | |
| putc () | Записує один символ у файл | |
| getw () | Читає ціле число з файлу | |
| putw () | Запис цілого числа у файл | |
| fseek () | Встановлює позицію вказівника файлу на вказане місце | |
| ftell () | Повертає поточну позицію покажчика файлу | |
| перемотати () | Встановлює покажчик файлу на початку файлу |
Як створити файл
Коли ви хочете працювати з файлом, першим кроком є його створення. Файл - це не що інше, як місце в пам'яті, де зберігаються дані.
Щоб створити файл у програмі на C, використовується такий синтаксис:
FILE *fp;
fp = fopen ("file_name", "mode");
У наведеному вище синтаксисі файл — це структура даних, визначена в стандартній бібліотеці.
fopen — це стандартна функція, яка використовується для відкриття файлу.
- Якщо файлу немає в системі, він створюється, а потім відкривається.
- Якщо файл уже присутній у системі, він безпосередньо відкривається за допомогою цього функція.
fp — покажчик файлу, який вказує на файл типу.
Кожного разу, коли ви відкриваєте або створюєте файл, ви повинні вказати, що ви збираєтеся робити з файлом. Файл у програмуванні «C» можна створити або відкрити для читання/запису. Режим використовується для визначення того, чи бажаєте ви відкрити файл для будь-якої з наведених нижче цілей. Нижче наведено різні типи режимів у програмуванні «C», які можна використовувати під час роботи з файлом.
| Файловий режим | Опис |
|---|---|
| r | Відкрийте файл для читання. Якщо файл знаходиться в режимі читання, дані не видаляються, якщо файл уже присутній у системі. |
| w | Відкрийте файл для запису. Якщо файл знаходиться в режимі запису, тоді створюється новий файл, якщо файл взагалі не існує. Якщо файл уже присутній у системі, усі дані всередині файлу скорочуються, і він відкривається для запису. |
| a | Відкрийте файл у режим додавання. Якщо файл знаходиться в режимі додавання, він відкривається. Вміст у файлі не змінюється. |
| r+ | відкритий для читання та запису з самого початку |
| w+ | відкрити для читання та запису, перезаписуючи файл |
| a+ | відкритий для читання та запису, додавання до файлу |
У наведеному синтаксисі ім’я файлу та режим вказуються як рядки, тому вони завжди повинні бути взяті в подвійні лапки.
приклад:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("data.txt", "w");
}
вихід:
Файл створюється в тій же папці, де ви зберегли свій код.
Ви можете вказати шлях, де ви хочете створити свій файл
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("D://data.txt", "w");
}
Як закрити файл
Завжди слід закривати файл, коли операції над ним закінчені. Це означає, що вміст і посилання на файл закриті. Це запобігає випадковому пошкодженню файлу.
'C' забезпечує функцію fclose для виконання операції закриття файлу. Синтаксис fclose такий:
fclose (file_pointer);
приклад:
FILE *fp;
fp = fopen ("data.txt", "r");
fclose (fp);
Функція fclose приймає вказівник на файл як аргумент. Потім файл, пов’язаний з покажчиком файлу, закривається за допомогою функції fclose. Він повертає 0, якщо закриття було успішним, і EOF (кінець файлу), якщо під час закриття файлу сталася помилка.
Після закриття файлу той самий покажчик файлу також можна використовувати з іншими файлами.
У програмуванні на C файли автоматично закриваються, коли програма завершується. Закриття файлу вручну за допомогою функції fclose є хорошою практикою програмування.
Запис у файл
У C, коли ви записуєте у файл, символи нового рядка '\n' повинні бути явно додані.
Бібліотека stdio пропонує необхідні функції для запису у файл:
- fputc(символ, покажчик_файлу): записує символ у файл, на який вказує file_pointer.
- fputs(str, file_pointer): записує рядок у файл, на який вказує file_pointer.
- fprintf(file_pointer, str, variable_lists): друкує рядок у файл, на який вказує file_pointer. Рядок може додатково включати специфікатори формату та список змінних variable_lists.
Програма нижче показує, як виконати запис у файл:
Функція fputc():
#include <stdio.h>
int main() {
int i;
FILE * fptr;
char fn[50];
char str[] = "Guru99 Rocks\n";
fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"
for (i = 0; str[i] != '\n'; i++) {
/* write to file using fputc() function */
fputc(str[i], fptr);
}
fclose(fptr);
return 0;
}
вихід:
Наведена вище програма записує один символ у fputc_test.txt файл, доки він не досягне символу наступного рядка «\n», який вказує, що речення було успішно написано. Процес полягає в тому, щоб взяти кожен символ масиву та записати його у файл.
- У наведеній вище програмі ми створили та відкрили файл під назвою fputc_test.txt у режимі запису та оголосили наш рядок, який буде записаний у файл.
- Ми виконуємо посимвольну операцію запису за допомогою циклу for і розміщуємо кожен символ у нашому файлі, доки не зустрінеться символ «\n», після чого файл закривається за допомогою функції fclose.
fputs () Функція:
#include <stdio.h>
int main() {
FILE * fp;
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 у режимі запису.
- Після того, як ми виконаємо операцію запису за допомогою функції fputs(), записавши три різні струни
- Потім файл закривається за допомогою функції fclose.
Функція fprintf():
#include <stdio.h>
int main() {
FILE *fptr;
fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"
/* write to file */
fprintf(fptr, "Learning C with Guru99\n");
fclose(fptr);
return 0;
}
вихід:
- У наведеній вище програмі ми створили та відкрили файл під назвою fprintf_test.txt у режимі запису.
- Після виконання операції запису за допомогою функції fprintf() шляхом запису рядка файл закривається за допомогою функції fclose.
Читання даних з файлу
Є три різні функції, призначені для читання даних із файлу
- fgetc(покажчик_файлу): Він повертає наступний символ із файлу, на який вказує вказівник файлу. Коли кінець файлу досягнуто, EOF надсилається назад.
- fgets(буфер, n, покажчик_файлу): Він зчитує n-1 символів із файлу та зберігає рядок у буфері, до якого останнім символом додається символ NULL '\0'.
- fscanf(file_pointer, conversion_specifiers, variable_adresses): використовується для розбору та аналізу даних. Він зчитує символи з файлу та призначає вхід до списку покажчики змінних variable_adresses з використанням специфікаторів перетворення. Майте на увазі, що, як і у випадку з scanf, fscanf припиняє читати рядок, коли зустрічається пробіл або новий рядок.
Наступна програма демонструє читання з файлу fputs_test.txt за допомогою функцій fgets(),fscanf() і fgetc() відповідно:
#include <stdio.h>
int main() {
FILE * file_pointer;
char buffer[30], c;
file_pointer = fopen("fprintf_test.txt", "r");
printf("----read a line----\n");
fgets(buffer, 50, file_pointer);
printf("%s\n", buffer);
printf("----read and parse data----\n");
file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
char str1[10], str2[2], str3[20], str4[2];
fscanf(file_pointer, "%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);
printf("----read the entire file----\n");
file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer
while ((c = getc(file_pointer)) != EOF) printf("%c", c);
fclose(file_pointer);
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
- У наведеній вище програмі ми відкрили файл під назвою «fprintf_test.txt», який раніше був написаний за допомогою функції fprintf(), і він містить рядок «Вивчення C з Guru99». Ми читаємо його за допомогою функції fgets(), яка читає рядок за рядком, де розмір буфера має бути достатнім для обробки всього рядка.
- Ми знову відкриваємо файл, щоб скинути файл покажчика на початок файлу. Створіть різні рядкові змінні для обробки кожного слова окремо. Роздрукуйте змінні, щоб побачити їхній вміст. Функція fscanf() в основному використовується для отримання та аналізу даних із файлу.
- Повторно відкрийте файл, щоб скинути файл покажчика на початок файлу. Зчитувати дані та друкувати їх із файлу символ за символом за допомогою функції getc(), доки не зустрінеться оператор EOF
- Після виконання операції читання файлу з використанням різних варіантів ми знову закрили файл за допомогою функції fclose.
Інтерактивне читання та запис файлів за допомогою getc і putc
Це найпростіші операції з файлами. Getc означає символ отримання, а putc означає символ розміщення. Ці дві функції використовуються для обробки лише одного символу одночасно.
Наступна програма демонструє функції обробки файлів у програмуванні на C:
#include <stdio.h>
int main() {
FILE * fp;
char c;
printf("File Handling\n");
//open a file
fp = fopen("demo.txt", "w");
//writing operation
while ((c = getchar()) != EOF) {
putc(c, fp);
}
//close file
fclose(fp);
printf("Data Entered:\n");
//reading
fp = fopen("demo.txt", "r");
while ((c = getc(fp)) != EOF) {
printf("%c", c);
}
fclose(fp);
return 0;
}
вихід:
- У наведеній вище програмі ми створили та відкрили файл під назвою demo в режимі запису.
- Після виконання операції запису файл закривається за допомогою функції fclose.
- Ми знову відкрили файл, який тепер містить дані в режимі читання. Цикл while виконуватиметься, доки не буде знайдено eof. Коли знайдено кінець файлу, операцію буде припинено, а дані будуть відображені за допомогою функції printf.
- Після виконання операції читання файл знову закривається за допомогою функції fclose.
Резюме
- Файл - це місце в пам'яті, де зберігаються дані.
- Програмування на C надає різні функції для роботи з файлом.
- Механізм роботи з файлами називається керуванням файлами.
- Файл необхідно відкрити перед виконанням над ним операцій.
- Файл можна відкрити в режимі читання, запису або додавання.
- Функції getc і putc використовуються для читання та запису одного символу.
- Функція fscanf() дозволяє читати та аналізувати дані з файлу
- Ми можемо читати (використовуючи getc (функція) весь файл за допомогою циклу, щоб охопити весь файл, доки не зустрінеться EOF
- Ми можемо писати у файл після створення його імені за допомогою функції fprintf() і він повинен мати символ нового рядка в кінці тексту рядка.











