Перемещает указатель файла на новое место, заданное параметрами position и mode.
long _FSeek(FCHAN chan, long position, int mode) FCHAN chan; /* Канал файла. */ long position; /* Позиция в файле. */ int mode; /* Как определить новое место */ |
Примечания
Если значение mode равно 0 (абсолютная позиция), указатель файла устанавливается согласно значению параметра position. Если mode равен 1 (относительно указателя файла), значение position прибавляется к текущей позиции указателя файла. Если mode равен 2 (относительно конца файла), _FSeek( ) перемещает указатель записи за конец файла. _FSeek( ) возвращает новую позицию указателя файла. Например, _FSeek(chan, 0L, 2) перемещает указатель файла к концу файла и возвращает длину файла в байтах.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
Следующий пример представляет собой одну API-программу, которая принимает два параметра - имя файла и целое число. Программа открывает файл, а затем, используя _FSeek( ) с флагом FS_FROMBOF, передвигает указатель записи в позицию со смещением, определенным целочисленным параметром, и считывает один байт данных из этой позиции файла.
Код Visual FoxPro
![]() | |
---|---|
SET LIBRARY TO FSEEK fc = FCREATE("x", 0) = FPUTS(fc, "abcdefghijklmnopqrstuvwxyz", 26) = FCLOSE(fc) ? XFSEEK("x", 2) && displays 3rd byte of file x as an integer ? XFSEEK("x", 4) && displays 5th byte of file x as an integer DELETE FILE x |
Код C
![]() | |
---|---|
#include <pro_ext.h> FAR Example(ParamBlk FAR *parm) { FCHAN fchan; char x; // Null terminate file name if (!_SetHandSize(parm->p[0].val.ev_handle, parm->p[0].val.ev_length+1)) { _Error(182); // "Insufficient memory" } _HLock(parm->p[0].val.ev_handle); ((char FAR *) _HandToPtr(parm->p[0].val.ev_handle)) [parm->p[0].val.ev_length] = '\0'; if ((fchan=_FOpen((char FAR*)_HandToPtr(parm->p[0].val.ev_handle), FC_NORMAL)) < 0) { _UserError("Could not open file."); } _HUnLock(parm->p[0].val.ev_handle); _FSeek(fchan, parm->p[1].val.ev_long, FS_FROMBOF); _FRead(fchan, &x, 1); _RetInt(x, 10); _FClose(fchan); } FoxInfo myFoxInfo[] = { {"XFSEEK", (FPFI) Example, 2, "C,I"}, }; FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; |