Ввод-вывод файлов 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 с помощью GuruСтрока размером 99 дюймов. Мы читаем её с помощью функции fgets(), которая считывает данные построчно, при этом размер буфера должен быть достаточным для обработки всей строки.
  2. Мы снова открываем файл, чтобы сбросить указатель на начало файла. Создаем различные строковые переменные для обработки каждого слова отдельно. Выводим содержимое переменных на экран. Функция fscanf() в основном используется для...tracи анализировать данные из файла.
  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() позволяет читать и анализировать данные из файла.
  • Мы можем прочитать (используя гетк функция) весь файл с помощью looping чтобы обработать весь файл до тех пор, пока не будет достигнут конец файла (EOF).
  • Мы можем записать файл после создания его имени, используя функцию fprintf () и в конце текста строки должен быть символ новой строки.

Подведем итог этой публикации следующим образом: