Позиционирование файла
При считывании и записи файлов они условно представляются в виде линейно расположенных данных, наподобие записи на непрерывной магнитной ленте. Место, с которого идет считывание в данный момент (или позиция, начиная с которой идет запись), определяется специальным указателем. Файлы последовательного доступа просматриваются строго от начала до конца, а в файлах произвольного доступа указатель может быть размещен в любом месте, начиная с которого ведется запись или считывание данных файла.
Таким образом, указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования:
- eofstat = feof(fid) – проверяет, достигнут ли конец файла с идентификатором fid. Возвращает 1, если указатель установлен на конец файла, и 0 – в противном случае;
- message = ferror(fid) – возвращает сведения об ошибке в виде строки message. Аргумент fid – идентификатор открытого файла (см. функцию fopen с ее подробным описанием);
- message = f error (f id,'clear') – очищает индикатор ошибки для заданного файла;
- [message,errnum] = ferror(.) – возвращает номер ошибки errnum последней операции ввода-вывода для заданного файла.
Если последняя операция ввода-вывода, выполненная для определенного значением fid файла, была успешной, значение message – это пустая строка, a errnum принимает значение 0.
Значение errnum, отличное от нуля, говорит о том, что при последней операции ввода-вывода произошла ошибка. Параметр message содержит строку, содержащую информацию о характере возникшей ошибки.
Пример:
>
>
fid
=
fopen(
'c:\examplel'
.
'a+'
)
fid
=
3
>
>
t
=
fread(
3
,[
4.5
])
t
=
Empty matrix:
4
-
by
-
0
>
>
ferror(
3
)
ans
=
Is the file open
for
reading?...
- frewind(fid) – устанавливает указатель позиции в начало файла с идентификатором fid;
- status-fseek(fid,offset,origin) – устанавливает указатель в файле с идентификатором fid в заданную позицию – на байт, указанный параметром offset относительно origin.
Аргументы:
- fid – идентификатор файла, возвращенный функцией fopen;
- offset – значение, которое интерпретируется следующим образом:
- offset>0 – изменяет позицию указателя на offset байт в направлении к концу файла;
- offset=0 – не меняет позицию указателя;
- offset<0 – изменяет позицию указателя на offset байт в направлении к началу файла;
- origin – аргумент, принимающий следующие значения:
- 'bof' или -1 – начало файла;
- 'cof' или 0 – текущая позиция указателя в файле;
- ' eof' или 1 – конец файла;
- status – выходной аргумент. Принимает значение 0, если операция fseek произошла успешно, и – 1 в противном случае. Если произошла ошибка, используйте функцию ferror для получения более подробной информации;
- position=ftel I (fid) – возвращает позицию указателя для файла с идентификатором fid, полученным с помощью функции fopen. Выходной аргумент position – неотрицательное целое число, определяющее позицию указателя в байтах относительно начала файла. Если запрос был неудачным, position принимает значение – 1. Используйте функцию ferror для отображения характера ошибки.
Примеры:
>
>
f id
-
fopen(
'c:\example'
.
'a+'
)
fid
=
3
>
>
count
=
fwrite(
3
,magic(
6
))
count
=
36
>
>
ftelK3)
ans
=
36
>
>
frewind(
3
):ftell(
3
)
ans
=
0
>
>
fseek(
3.12.0
);ftell(
3
)
ans
=
12
>
>
feof(
3
)
ans
=
0
>
>
fclose(
3
)
ans
=
0