Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по С++.doc
Скачиваний:
27
Добавлен:
20.08.2019
Размер:
2.26 Mб
Скачать

Дополнительные возможности работы с файлами

Анализ и упровление положением уазатля файл производится с помощью фунций feof, fseek, rewind. Положение курсора в файле можно определить с помощью функции feof .

Прототип фукции feof:

Int feof (FILE * stream);

Возвращаемое значение фунции feof:

- нуль, если коец файла не достигнут;

- не нуль, если конец файла достигнут.

При чтении из файла с помощью функций fgets или fscanf признк конца файла формируется сразу после считывания последних данных файла. Поэтому конец файла в этих случаях можно обнаружить из анализа значения результата вызова функции feof. Пример:

while (! feof (fp)) { fgets (str,50,fp); … …}

При посимвольном чтении файла конец файла можно обнаружить с помощью анализа результата чтения:

while ((c = getc(fp)) != EOF) {… …

Если с помощью fread прочитана из файла последняя запись и достигнут конец файл, функция feof возвращает не нуль только после очередной попытки чтения из файла и сохраняет его до тех пор, пока файл не будет закрыт или не будет вызвана функция rewind. Так как значение feof(!=0) обнаруживается только после очередной неудачной попытки чтения из файла с помощью оператора fread, то для обнаружения конца файла лучше применять fread. Пример: while(fread(&zapst,sizeof(stud),1,fp))

Фунция fread возвращает результат, равный 1, только при успешном чтении и нуль – при неуспешном, при этом условие цикла станет ложным, и выполнение цикла станет ложным.

Для чтения или записи данных в заданное место файла используют функцию fseek, с помощью которой указатеь устанавливается в заданное место файла. Прототип функции:

Int fseek (FILE * stream, long offset, int nach);

- stream – указатель переменной типа FILE;

- offset – смещение указателя в байтах относиельно начала, заданного параметра nach;

- nach – начальная точка, от которой производится смещение.

Функция fseek перемещает указатель файла , связанный с потоком stream, на новое место, которое определяется значением offset и nach. Следующая операция в/в будет выполнена, начиная с той позиции, на которую будет перемещен указатель. Параметр nach определяет начальную точку, от которой производится смещение, и может иметь значение одной из следующих констант, определенных в stdio.h:

SEEK_SET = 0; - от начала файла;

SEEK_CUR = 1; - от текущего положения указателя файла;

SEEK_END = 2; - от конца файла.

Попытка переместитьуказатель за начало файла фызывает ошибку. Возвращаемое значение:

0 – если указатель перемещен успешно;

!0 – не нуль, если произошла ошибка.

Примеры обращения к функции fseek:

fseek(fp, -n, 1); - на n байтов назад от текущей позиции;

fseek(fp, -m, SEEK_CUR); - на m байтов назад от текущей позиции;

fseek(fp, 100L, 0); - на 100 байтов от начала файла.

С помощью функции rewind можно установить указатель, связанный с файлом, на начало файла. Прототип функции:

void rewind (FILE * stream);

Эквивалентно вызову: fseek(fp, 0L, 0); или fseek(fp, 0L, SEEK_SET);

Функция rewind очищает признак конца файла и признак ошибки.

Удалить файл можно с помощью функцией remove. Прототип функции:

Int remove ( const char * filename);