
ПТСПЦУВСБ / 28. Работа с текстовыми файлами в С
..docx28. Работа с текстовыми файлами в С.
ANSI C реализует работу с файлами двумя основными способами. Первый подход
обеспечивает последовательный доступ к данным в файле и удобен для работы с
текстовыми файлами. Второй позволяет осуществлять чтение или запись в произвольное
место файла.
Организация последовательного доступа к файлам в C во многом схожа с
текстовыми файлами Pascal (таб. 5.3).
В 1 строке таблицы подключается заголовочный файл “stdio.h”, это необходимо
для использования подпрограмм работы с файлами.
Во 2 строке таблицы объявляется переменная-указатель на структуру FILE.
Структура хранит информацию о файле c которым она связана и нужна для
взаимодействия программы с операционной системой. Количество и состав полей FILE
различается для различных ОС и при использовании разных файловых систем. Стандарт
ANSI C предписывает разработчикам компиляторов языка C учитывать такие технические
особенности и программист в большинстве случаев может не заботиться о внутреннем
устройстве этой структуры. Поэтому, непосредственный доступ к полям структуры FILE
обычно не производится. Обычно эта структура хранит такие данные, как: дату и время
создания файла, дескриптор (англ. handle) – уникальный целочисленный номер файла, с
которым оперирует ОС, список атрибутов файла, информацию о правах доступа к нему и
т.п. Переменная типа Text в Pascal также является указателем на аналогичную запись.
В 3 строке таблицы файл открывается для записи. В C это делается одной
командой: FILE *fopen(”Путь_к_файлу”, ”Режим_доступа”). Функция fopen
возвращает указатель на структуру FILE, поля которой хранят информацию о свойствах
файла Путь_к_файлу. Если ОС не может предоставить доступ к интересующему файлу,
например, он уже используется другой программой, то fopen вернет NULL. При
открытии файла можно выбрать один из 6 режимов доступа (таб. 5.4).
4 строке таблицы 5.3 в текстовый файл выводятся числа в 2 столбца. Числа в обоих
столбцах выравниваются по правому краю 4 символьного поля. Для этого в программе
используется функция fprintf. Она является вариантом функции printf для работы с
файлами отличается от printf только наличием дополнительного аргумента. Первым
аргументом fprintf является указатель на структуру FILE, связанную с файлом, с
которым осуществляется работа.
В 5 строке таблицы с помощью функции fclose файл закрывается. При этом все
хранящиеся в оперативной памяти временные файловые буфера физически записываются
на диск, операционная система информируется, что закрываемый файл больше не
используется программой, связь между F и структурой FILE разрушается.
Для чтения данных из файла, созданного с помощью программы из таблицы 5.3
можно использовать программу, приведенную в листинге 5.3. В ней с помощью функции
fscanf осуществляется чтение в переменные a и b значений из двух столбцов текущей
строки загружаемого файла. В цикле while осуществляется проверка на достижение конца
файла с помощью feof(FILE *), feof возвращает ненулевое значение (“Истина”) в
случае, если достигнут конец файла.