Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
138
Добавлен:
13.03.2016
Размер:
470.02 Кб
Скачать

3.3. Файлы в Си

3.3.1. Общие понятия.

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

Файл- это последовательность однотипных компонент.Число компонент файла не ограничено. Компонентой файла мо­жет быть строка или байт. После последней компоненты файла стоит специальный код, называемый признаком конца файла; этот код обычно ставится автоматически, без участия программиста.

В классическом понимании файл рассматривается как абст­рактное обобщение данных на устройстве с последовательным дос­тупом, типичным представителем которого является магнитная лента. В библиотеках современных языков программирования, ко­нечно, имеются средства и для работы с файлами прямого доступа.

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

Обычно в алгоритмических языках определяется программное и физическоеимя файлов. В Си программное имя - это имя переменной типаFILE*, физическое имя - это имя устройства или файла на диске. Существуют специальные операторы, связывающие про­граммное и физическое имя файла.

Файлы бывают текстовыми идвоичными.

Текстовые файлы хранят информациюво внешнем пред­ставлении. Они имеют два основных признака: во-первых, их ком­понентами являются строки символов; во-вторых, эта символьная информация интерпретируется в соответствии с типом вводимых или выводимых переменных. Эти файлы являются обобщением данных на устройствеCON (т.е. вводимых с клавиатуры или выводимых на экран компьютера). Умение работать с текстовыми файлами необхо­димо даже начинающим программистам, так как на устройствеCON данные существуют малый промежуток времени, а обычно имеется потребность в их длительном хранении.

Текстовые файлы можно ввести в ЭВМ, прочитать, исправить с помощью текстового редактора. Они хранят информацию во внеш­нем представлении, в виде, понятном для человека. Такие файлы часто называются видимыми.

Двоичный файл- это последовательность байтов; обмен ин­формации между двоичным файлом и переменными программы про­исходит без преобразования.

3.2.Функции Си для работы с файлами

Шаблон структуры FILE и прототипы основных функций работы с файлами хранятся в stdio.h. Перед использованием файла необхо­димо:

1. Описать его программное имя как указатель на структуру типа FILE:

FILE *ИмяУказателя

  1. Открыть файл. Функция открытия файла устанавливает связь между программным и физическим именами файла и подго­тавливает его к использованию. Шаблон функции открытия файла: FILE *fopen(char *ИмяФайла, char *режим);

первый параметр задает строку, в которой хранится физиче­ское имя файла, записанное по правилам MS DOS, второй - режим открытия.

Приведем некоторые режимы:

“r” - открыть для чтения;

“w” - открыть для записи;

rb” - открыть двоичный файл для чтения;

“wb” - открыть двоичный файл для записи;

“rt” - открыть текстовый файл для чтения;

“wt” - открыть текстовый файл для записи.

Результат функции fopen необходимо присвоить переменной типаFILE *.

Пример открытия файла и обнаружения ошибки при открытии:

FILE *fp;

fp=fopen(“x.txt”,”w”);

if (fp==NULL)

puts(“Ошибка при открытии файла”)

else ....

Или:

FILE *fp;

if ((fp=fopen(“x.txt”,”w”))==NULL)

{ puts(“Ошибка при открытии файла”);

exit(1); }.

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

Шаблон функции за­крытия файла:

int fclose(FILE * f) - возвращает значение нуль, если операция закрытия прошла успешно.

Функция с шаблоном

int feof(FILE *fp) - возвращает значение, не равное 0 (истина), если конец файла достигнут, и значение 0 (ложь) в противном слу­чае. Существует также константа EOF (End Of File - конец файла), хранящая значение кода конца файла; этот код может быть разным для различных систем программирования.

Рассмотренные ранее функции scanf, printf, puts, gets имеют аналоги для работы с текстовыми файлами. Их названия получа­ются добавлением справа буквыf к именам упомянутых функций.

Шаблоны функций файлового форматного вывода и ввода:

int fprintf(програм_имя_ файла, форматная_строка, список_вывода);

int fscanf(програм_имя_ файла, форматная_строка, список_вывода);

Шаблоны функций fputs и fgets:

char *fgets(char *string, int nmax,FILE *f)

char *fputs(char *string, FILE *f)

где string - адрес начала вводимого массива символов,

f - указатель на текстовый файл,

nmax - максимальная длина вводимой строки плюс 1.

Функции putc (записать символ в поток) иgetc (прочитать сим­вол из потока) работают как с текстовыми, так и с двоичными фай­лами. Их шаблоны:

int putc(int ch, FILE* f) (если оператор выполнен успешно, то возвращается записанный символ, иначе EOF)

int getc(FILE *f) (если считывание не выполнено, то EOF)

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

unsigned fread(void *buf, int zap, int n,FILE *f)

unsigned fwrite(const void *buf, int zap, int n,FILE *f)

где buf - указатель на область памяти, с которой будет происхо­дить обмен информацией, zap - длина записи, n - число считанных (записанных) записей, f - указатель на файл.