Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verschiebt den Dateizeiger an eine neue Position, wie durch position und mode angegeben.
long _FSeek(FCHAN chan, long position, int mode)
FCHAN chan; /* File channel. */
long position; /* Position in file. */
int mode; /* How to determine new location */
Hinweise
Ist mode gleich 0 (absolut), wird der Dateizeiger auf den Wert von position gesetzt. Ist mode gleich 1 (relativ zum Dateizeiger), wird der Wert von position zur aktuellen Position des Dateizeigers hinzugefügt. Ist mode gleich 2 (relativ zum Dateiende), verschiebt _FSeek( ) den Dateizeiger hinter das Dateiende. _FSeek( ) gibt die neue Position des Dateizeigers zurück. _FSeek(Kanal, 0L, 2) z. B. verschiebt den Dateizeiger an das Dateiende und gibt die Dateilänge in Bytes zurück.
Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Beispiel
Im folgenden Beispiel werden zwei Parameter, nämlich ein Dateiname und eine ganze Zahl, an eine API-Routine übergeben. Die Datei wird geöffnet. Mit _FSeek( ) und dem Attribut FS_FROMBOF wird der Dateizeiger an die Versatzposition verschoben, die durch den ganzzahligen Parameter angegeben wird. An dieser Position wird ein einzelnes Byte aus der Datei gelesen.
Visual FoxPro-Code
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-Code
#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
};
Siehe auch
_FCopy( ), API-Bibliotheksroutine | _FFlush( ), API-Bibliotheksroutine | _FGets( ), API-Bibliotheksroutine | _FPuts( ), API-Bibliotheksroutine