Freigeben über


_FGets( ), API-Bibliotheksroutine

Kopiert eine einzelne Zeile aus der angegebenen Datei in den Puffer. Der Kopiervorgang beginnt an der aktuellen Position in der Datei.

unsigned int _FGets(FCHAN chan, char FAR *buffer, int maxlen)
FCHAN chan;               /* File channel of file from which to copy. */
char FAR *buffer;            /* Buffer address. */
int maxlen;                  /* Maximum length of line in bytes. */

Hinweise

_FGets( ) kopiert eine Zeile der Länge maxlen, die durch einen Wagenrücklauf von der nächsten Zeile getrennt ist. Der Wagenrücklauf wird in ein Nullabschlusszeichen übersetzt und im Puffer gespeichert. Zeilenvorschübe werden ignoriert und nicht in den Puffer kopiert. _FGets( ) gibt die Anzahl der in den Puffer kopierten 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 wird eine durch einen Parameter angegebene Datei geöffnet. Jede Zeile in der Datei wird kopiert und angezeigt.

Visual FoxPro-Code

SET LIBRARY TO FGETS 
fc = FCREATE("x", 0)
= FPUTS(fc, REPL("X", 512), 512)
= FCLOSE(fc)
= XFGETS("x")
DELETE FILE x

C-Code

#include <pro_ext.h>

#define BUFFSIZE 256
static char lineBuffer[BUFFSIZE];

void putLong(long n)
{
   Value val;

   val.ev_type = 'I';
   val.ev_long = n;
   val.ev_width = 10;

   _PutValue(&val);
}

FAR Example(ParamBlk FAR *parm)
{
   FCHAN fchan;

//   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);

   while (!_FEOF(fchan))
   {
      _FGets(fchan, lineBuffer, BUFFSIZE);
      _PutStr(lineBuffer); _PutChr('\n');
   }
   _FClose(fchan);
}

FoxInfo myFoxInfo[] = {
   {"XFGETS", (FPFI) Example, 1, "C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_FRead( ), API-Bibliotheksroutine | _FSeek( ), API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API