Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_po_si.doc
Скачиваний:
12
Добавлен:
12.11.2018
Размер:
11.78 Mб
Скачать

Работа с файлами на диске

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

Аналогичным образом (так же как это делается при работе со стандартными потоками ввода-вывода stdin и stdout) можно осуществлять работу с файлами на диске. Для этой цели в библиотеку языка Си включены следующие функции:

fgetc( ), getc( ) - ввод (чтение) одного символа из файла;

fputc( ), putc( ) - запись одного символа в файл;

fprintf( ) - форматированный вывод в файл;

fscanf( ) - форматированный ввод (чтение) из файла;

fgets( ) - ввод (чтение) строки из файла;

fputs( ) - запись строки в файл.

Различие между функциями fgetc( ), getc( ) и fputc( ), putc( ) здесь не рассматривается, и поэтому в примерах мы будем использовать только одну из них.

Двоичный (бинарный) режим обмена с файлами.

Двоичный (бинарный) режим обмена с файлами. Двоичный режим обмена организуется с помощью функций getc() и putc(), обращение к которым имеет следующий формат:

с = getc(fp);

putc(c, fp);

где fp - указатель на поток;

с - переменная типа int для приема очередного символа из файла или для записи ее значения в файл. Прототипы функции:

int getc ( FILE *stream );

int putc (int c, FILE * stream );

В качестве примера использования функций getc( ) и putc( ) рассмотрим программы ввода данных в файл с клавиатуры и программу вывода их на экран дисплея из файла.

Программа ввода читает символы с клавиатуры и записывает их в файл. Пусть признаком завершения ввода служит поступивший от клавиатуры символ '#'. Имя файла запрашивается у пользователя. Если при вводе последовательности символов была нажата клавиша <Enter>, служащая разделителем строк при вводе с клавиатуры, то в файл записываются управляющие коды "Возврат каретки" (CR- значение 13) и "Перевод строки" (LF - значение 10). Код CR в дальнейшем при выводе вызывает перевод маркера (курсора) в начало строки экрана дисплея. Код LF служит для перевода маркера на новую строку дисплея. Значения этих кодов в тексте программы обозначены соответственно идентификаторами CR и LF, т.е. CR и LF - именованные константы. Запись управляющих кодов CR и LF в файл позволяет при последующем выводе файла на экран отделить строки друг от друга.

В приводимых ниже программах используются уже рассмотренные выше функции getchar( ), putchar( ) для посимвольного обмена со стандартными потоками stdin, stdout.

Следующая программа читает поток символов из ранее созданного файла и выводит его на экран дисплея:

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

В этой программе после вывода очередного кадра из МАХ строк для перехода к следующему кадру необходимо нажать любую клавишу.

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

Необходимые примеры и разъяснения приводятся в главе 8 при описании программы обслуживания базы данных о сотрудниках предприятия. Функции save( ) и load( ) из этого примера (см. §8.2) позволяют сохранить во внешней памяти и загрузить из внешней памяти базу данных о сотрудниках предприятия.