Ввод-вывод файлов C: создание, открытие, чтение, запись и закрытие файла

C Управление файлами

Файл может использоваться для хранения большого объема постоянных данных. Как и многие другие языки, 'C' предоставляет следующие функции управления файлами,

  1. Создание файла
  2. Открытие файла
  3. Чтение файла
  4. Запись в файл
  5. Закрытие файла

Ниже приведены наиболее важные функции управления файлами, доступные в языке «C».

функция цель
fopen() Создание файла или открытие существующего файла
fзакрыть () Закрытие файла
fprintf() Запись блока данных в файл
фсканф () Чтение данных блока из файла
получить () Читает один символ из файла
путк () Записывает один символ в файл
получить () Считывает целое число из файла
путв () Запись целого числа в файл
поиск () Устанавливает положение указателя файла в указанное место
фтелл () Возвращает текущую позицию указателя файла
перемотка назад () Устанавливает указатель файла в начало файла

Как создать файл

Всякий раз, когда вы хотите работать с файлом, первым шагом является его создание. Файл — это не что иное, как пространство в памяти, где хранятся данные.

Для создания файла в программе на языке 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(file_pointer): Он возвращает следующий символ из файла, на который указывает указатель файла. Когда конец файла достигнут, EOF отправляется обратно.
  • fgets(буфер, n, указатель_файла): Он считывает n-1 символов из файла и сохраняет строку в буфере, к которому в качестве последнего символа добавляется NULL-символ «\0».
  • fscanf (указатель_файла, спецификаторы преобразования, адреса_переменных): используется для анализа и анализа данных. Он считывает символы из файла и присваивает ввод списку указатели на переменные переменные_адреса с использованием спецификаторов преобразования. Имейте в виду, что, как и в случае со 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 означает get символ, а putc означает put символ. Эти две функции используются для одновременной обработки только одного символа.

Следующая программа демонстрирует функции обработки файлов в программировании на языке «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() позволяет читать и анализировать данные из файла.
  • Мы можем прочитать (используя гетк функция) весь файл, зацикливая его на весь файл до тех пор, пока не встретится EOF
  • Мы можем записать файл после создания его имени, используя функцию fprintf () и в конце текста строки должен быть символ новой строки.