Учебники

12) C Files I / O

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», которые можно использовать при работе с файлом.

Файловый режим Описание
р Откройте файл для чтения. Если файл находится в режиме чтения, данные не удаляются, если файл уже присутствует в системе.
вес Откройте файл для записи. Если файл находится в режиме записи, то создается новый файл, если файл вообще не существует. Если файл уже присутствует в системе, то все данные внутри файла обрезаются и открываются для записи.
a Откройте файл в режиме добавления. Если файл находится в режиме добавления, файл открывается. Содержимое файла не изменяется.
г + открыт для чтения и записи с самого начала
W + открыть для чтения и записи, перезаписать файл
а + открыть для чтения и записи, добавление в файл

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

Пример:

#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 (char, file_pointer) : записывает символ в файл, на который указывает 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 (file_pointer): возвращает следующий символ из файла, на который указывает указатель файла. Когда достигнут конец файла, EOF отправляется обратно.
  • fgets (buffer, n, file_pointer): он читает n-1 символов из файла и сохраняет строку в буфере, в котором символ NULL ‘\ 0’ добавляется как последний символ.
  • fscanf (file_pointer, translation_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 (), и он содержит строку «Learning C with Guru99». Мы читаем это, используя функцию fgets (), которая читает строку за строкой, где размер буфера должен быть достаточным для обработки всей строки.
  2. Мы снова открываем файл, чтобы сбросить файл указателя так, чтобы он указывал на начало файла. Создайте различные строковые переменные для обработки каждого слова в отдельности. Распечатайте переменные, чтобы увидеть их содержимое. Fscanf () в основном используется для извлечения и анализа данных из файла.
  3. Снова откройте файл, чтобы сбросить файл указателя так, чтобы он указывал на начало файла. Читайте данные и печатайте их из файла символ за символом, используя функцию getc (), пока не встретите оператор EOF
  4. После выполнения операции чтения файла с использованием разных вариантов мы снова закрыли файл с помощью функции fclose.

Интерактивное чтение и запись файлов с помощью getc и putc

Это самые простые файловые операции. Getc обозначает get персонажа, а 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;
    }

Вывод:

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

Резюме

  • Файл — это пространство в памяти, где хранятся данные.
  • Программирование ‘C’ предоставляет различные функции для работы с файлом.
  • Механизм манипулирования файлами называется управлением файлами.
  • Файл должен быть открыт перед выполнением операций с ним.
  • Файл может быть открыт в режиме чтения, записи или добавления.
  • Функции Getc и Putc используются для чтения и записи одного символа.
  • Функция fscanf () позволяет читать и анализировать данные из файла.
  • Мы можем прочитать (используя функцию getc ) весь файл, выполнив цикл, чтобы охватить весь файл, пока не встретится EOF
  • Мы можем записать в файл после создания его имени, используя функцию fprintf (), и он должен иметь символ новой строки в конце текстовой строки.