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

Работа с файлами в си ( дескриптор | определение файла ) «структура file»

   Работа с файлами в си

Рано или поздно перед нами встает вопрос о хранении информации, которую мы получаем в программе, ведь по завершению программы, все наши данные пропадают. Так вот, таким источником информации является файл. Давайте дадим определение файла. Файл - это единица хранения данных, которые обычно хранятся на винчестерах (жестких дисках). Мы будем рассматривать как последовательный, так и произвольный доступ к файлу. Давайте теперь рассмотрим работу с файлами.

В языке Си любой файл рассматривается как поток байтов. Концом любого файла является спец. символ. При открытии файла, ему ставится определенный поток и возвращается указатель на структуру FILE (так же возвращаемое значение именуют - дескриптор файла). Т.е. доступ к элементам файла будет происходить с помощью этого указателя.

Давайте теперь рассмотрим программку работы с файломи в си ( ввод имени и балла ):

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

int main()
{
     int bal;
     char name[15];
     FILE *file;

     if ((file = fopen("1.txt","w")) == NULL)
        printf("Файл невозможно открыть или создать\n");
     else{
        for(;;){
           scanf ("%d%s", &bal, name);
           if (bal == 0)
              break;
           fprintf(file,"%d %s\n", bal, name);
        }
     }
     fclose(file);
return 0;
}

Ну и проведем подробный анализ данной программы:

   Cтруктура file ( дескриптор файла )

FILE *file;

объявляем указатель на структуру File ( дескриптор файла ). Структура - это особый тип данных. Т.е. для доступа к файлу нам необходимо иметь указатель на файл ( дескриптор файла ), и со всеми файлами работает эта структура.

if ((file = fopen("1.txt","w")) == NULL)

функция fopen принимает два параметра. Первый - это имя файла, второй - режим работы с файлом, в котором он будет открыт. В нашем режиме, если файл не существует, то он создается, а если файл уже был, то его содержимое полностью стирается. Эта функция возвращает указатель на структуру FILE ( дескриптор файла ), т.е. теперь мы сможем управлять созданным файлом при помощи нашего указателя file. Оператор if тут используется, так как идет проверка указателя на NULL, а NULL может быть, только если файл мы не смогли открыть.

fprintf(file,"%d %s\n", bal, name);

оператор записывает данные в файл. Принцип действия тот же, какой и у оператора printf, только тут в начале указывается указатель на файл ( дескриптор файла ), в который будет производится запись данных.

fclose(file);

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

Задания:

  1. создайте файл 2.txt и заполните его 5 цифрами, условием выхода сделайте цифру 0. По завершении работы программы просмотрите созданный файл. Снова запустите программку. Попробуйте найти ответ, из-за чего стерлись данные в этом уроке.
  2. попробуйте убрать функцию закрытия файла fclose. Повлияло ли это на выполнение программы? Если нет, то, как вы думаете почему?

Следующие уроки:

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