Анализ и упровление положением уазатля файл производится с помощью фунций 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, с помощью которой указатеь устанавливается в заданное место файла. Прототип функции:
- 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. Прототип функции: