C Files I/O: створення, відкриття, читання, запис і закриття файлу

C Керування файлами

Файл можна використовувати для зберігання великого обсягу постійних даних. Як і багато інших мов «C» надає такі функції керування файлами,

  1. Створення файлу
  2. Відкриття файлу
  3. Читання файлу
  4. Запис у файл
  5. Закриття файлу

Нижче наведено найважливіші функції керування файлами, доступні в 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», який вказує, що речення було успішно написано. Процес полягає в тому, щоб взяти кожен символ масиву та записати його у файл.

Запис у файл

  1. У наведеній вище програмі ми створили та відкрили файл під назвою fputc_test.txt у режимі запису та оголосили наш рядок, який буде записаний у файл.
  2. Ми виконуємо посимвольну операцію запису за допомогою циклу 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);
    }

вихід:

Запис у файл

Запис у файл

  1. У наведеній вище програмі ми створили та відкрили файл під назвою fputs_test.txt у режимі запису.
  2. Після того, як ми виконаємо операцію запису за допомогою функції fputs(), записавши три різні струни
  3. Потім файл закривається за допомогою функції 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;
    }

вихід:

Запис у файл

Запис у файл

  1. У наведеній вище програмі ми створили та відкрили файл під назвою fprintf_test.txt у режимі запису.
  2. Після виконання операції запису за допомогою функції 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

Читання даних з файлу

  1. У наведеній вище програмі ми відкрили файл під назвою «fprintf_test.txt», який раніше був написаний за допомогою функції fprintf(), і він містить рядок «Вивчення C з Guru99». Ми читаємо його за допомогою функції fgets(), яка читає рядок за рядком, де розмір буфера має бути достатнім для обробки всього рядка.
  2. Ми знову відкриваємо файл, щоб скинути файл покажчика на початок файлу. Створіть різні рядкові змінні для обробки кожного слова окремо. Роздрукуйте змінні, щоб побачити їхній вміст. Функція fscanf() в основному використовується для отримання та аналізу даних із файлу.
  3. Повторно відкрийте файл, щоб скинути файл покажчика на початок файлу. Зчитувати дані та друкувати їх із файлу символ за символом за допомогою функції getc(), доки не зустрінеться оператор EOF
  4. Після виконання операції читання файлу з використанням різних варіантів ми знову закрили файл за допомогою функції 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;
    }

вихід:

Інтерактивне читання та запис файлів за допомогою getc і putc

Інтерактивне читання та запис файлів за допомогою getc і putc

  1. У наведеній вище програмі ми створили та відкрили файл під назвою demo в режимі запису.
  2. Після виконання операції запису файл закривається за допомогою функції fclose.
  3. Ми знову відкрили файл, який тепер містить дані в режимі читання. Цикл while виконуватиметься, доки не буде знайдено eof. Коли знайдено кінець файлу, операцію буде припинено, а дані будуть відображені за допомогою функції printf.
  4. Після виконання операції читання файл знову закривається за допомогою функції fclose.

Резюме

  • Файл - це місце в пам'яті, де зберігаються дані.
  • Програмування на C надає різні функції для роботи з файлом.
  • Механізм роботи з файлами називається керуванням файлами.
  • Файл необхідно відкрити перед виконанням над ним операцій.
  • Файл можна відкрити в режимі читання, запису або додавання.
  • Функції getc і putc використовуються для читання та запису одного символу.
  • Функція fscanf() дозволяє читати та аналізувати дані з файлу
  • Ми можемо читати (використовуючи getc (функція) весь файл за допомогою циклу, щоб охопити весь файл, доки не зустрінеться EOF
  • Ми можемо писати у файл після створення його імені за допомогою функції fprintf() і він повинен мати символ нового рядка в кінці тексту рядка.

Підсумуйте цей пост за допомогою: