Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

Язык c — запись в текстовый файл ( функция fread | fwrite )

   Язык c — запись в текстовый файл

Для записи в текстовый файл последовательного доступа языка c мы использовали функцию fprintf, которая записывала в файл определенное количество символов, в зависимости от длины слова или количества цифр в числе. Теперь давайте посмотрим, что делает подобная функция fwrite, которая записывает данные в текстовый файл произвольного доступа.

Функция fwrite всегда, вне зависимости от количества символов или количества цифр, выделяет определенную длину для данного. Эта длина задается в функции. Ну, а теперь давайте рассмотрим пример записи в текстовый файл языка С с помощью функции fwrite:

#include <conio.h>
#include <stdio.h>

int main()
{
     int bal;
     FILE *file;

     if ((file = fopen("3.txt","w")) == NULL)
        printf("Файл невозможно открыть или создать\n");
     else{
        for(int i=0; i<5;i++){
           scanf("%d", &bal);
           fwrite (&bal, sizeof(int),1, file );
        }
     }
     fclose(file);
     getch();
return 0;
}

Давайте теперь разберем функцию записи в текстовый файл fwrite досконально:

fwrite (&bal, sizeof(int),1, file );

Первым параметром мы передаем адрес нашего значения, которое мы хотим записать в файл (неважно число это или строка); далее вторым параметром следует размер типа нашего данного (в данном случае у нас тип int, что сообщает функции выделять под каждое значение по 2 байта); далее третьим параметром следует количество элементов, которое мы собрались записывать в файл (если б у нас был массив значений, то мы могли бы сразу записать несколько элементов); ну, и последним аргументов нашей функции следует указатель на файл, в который будет производиться запись данных

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

#include <conio.h>
#include <stdio.h>

int main()
{
     int bal;
     FILE *file = fopen("3.txt","r");

     if (file == NULL)
        printf ("Ошибка при открытии файла");
     else {
        while (!feof(file)){
        fread(&bal, sizeof(int),1, file);
        printf ("%d ", bal);
        }
     }

     fclose(file);
     getch();
return 0;
}

   Функция fread

Давайте теперь тут разберем отличия функции fread от чтения из файла последовательного доступа:

fread(&bal, sizeof(int),1, file);

Все аргументы функции fread идентичны аргументам fwrite. Только вместо записи в файл данного, содержащегося в переменной bal, происходит записть данного из файла в переменную bal. Иными словами для fwrite - из переменной в файл запись, а для функции fread - из файла в переменную происходит считывание значения. Больше различий нету.

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

Предвидущие уроки:

  1. Введение в файлы
  2. Файлы произвольного доступа
При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru