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

Удаление файлов

Функция remove() удаляет указанный файл. Прототип функции:

int remove(const char *file_name);

В случае успешного выполнения эта функция возвращает нуль, иначе — ненулевое значение.

В фрагменте программы демонстрируется удаление файла, имя которого вводится с клавиатуры

char str[80];

printf("\n Введите имя файла для удаления ");

grets(str);

if(*str)

if(remove(str))

{ printf("Нельзя стереть файл.\n");

exit(1);

}

Дозапись потока

Для дозаписи содержимого выводного потока в файл применяется функция fflush():

int fflush(FILE *f);

Все данные, находящиеся в буфере записываются в файл, который указан с помощью f. При вызове функции fflush() с пустым (null) указателем файла f будет выполнена дозапись во все файлы, открытые для вывода.

При успешном выполнения fflush() возвращает нуль, иначе — EOF.

Позиционирование в файле

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

int fseek(FILE *stream, long offset, int whence);

Параметр offset задает количество байт, на которое необходимо сместить указатель в направлении, указанном whence. Приводим значения, которые может принимать параметр whence:

SEEK_SET

0

Смещение выполняется от начала файла

SEEK_CUR

1

Смещение выполняется от текущей позиции указателя

SEEK_END

2

Смещение выполняется от конца файла

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

Наряду с функцией fseek(), для перемещения указателя текущей позиции в файле на начало может быть использована функция rewind(). Иначе говоря, функция rewind() выполняет "перемотку" файла в начало. Прототип функции:

void rewind(FILE *f).

Текстовые и двоичные файлы

Различают два вида файлов: текстовые и бинарные.

Текстовый файл — это последовательность ASCII-кодов символов. В стандарте С считается, что текстовый файл организован в виде строк В текстовом файле могут выполняться определенные преобразования символов. Например, символ новой строки может быть заменен парой символов — возврата каретки и перевода строки 13, 10 (0xD, 0xA).. Поэтому может и не быть однозначного соответствия между символами, которые пишутся (читаются), и теми, которые хранятся в файле. Текстовые файлы могут быть просмотрены и отредактированы текстовым редактором

Двоичный файл — это последовательность байт, причем никакого преобразования символов не происходит. Бинарные файлы – файлы, не имеющие структуры текстовых файлов. Каждая программа для своих бинарных фалов определяет собственную структуру. Кроме того, количество тех байтов, которые пишутся (читаются), и тех, которые хранятся на внешнем устройстве, одинаково.

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