DosSetFilePtr

Moves the read/write pointer according to the type of move specified.

Syntax
DosSetFilePtr (hFile, ib, method, ibActual)

Parameters

 * hFile (HFILE) - input : The handle returned by a previous DosOpen function.
 * ib (LONG) - input : The signed distance (offset) to move, in bytes.
 * method (ULONG) - input : The method of moving.
 * Specifies a location in the file from where the ib to move the read/write pointer starts. The values and their meanings are described in the following list:
 * 0 FILE_BEGIN Move the pointer from the beginning of the file.
 * 1 FILE_CURRENT Move the pointer from the current location of the read/write pointer.
 * 2 FILE_END Move the pointer from the end of the file. Use this method to determine a file's size.


 * ibActual (PULONG) - output : Address of the new pointer location.

Return Code
ulrc (APIRET) - returns DosSetFilePtr returns one of the following values:
 * 0 NO_ERROR
 * 1 ERROR_INVALID_FUNCTION
 * 6 ERROR_INVALID_HANDLE
 * 132 ERROR_SEEK_ON_DEVICE
 * 131 ERROR_NEGATIVE_SEEK
 * 130 ERROR_DIRECT_ACCESS_HANDLE

Remarks
The read/write pointer in a file is a signed 32-bit number. A negative value for ib moves the pointer backward in the file; a positive value moves it forward. DosSetFilePtr cannot be used to move to a negative position in the file.

DosSetFilePtr cannot be used for a character device or pipe.

Example Code
This example opens or creates and opens a file named "DOSTEST.DAT", writes to it, positions the file pointer back to the beginning of the file, reads from the file, and finally closes it. 
 * 1) define INCL_DOSFILEMGR         /* File Manager values */
 * 2) define INCL_DOSERRORS          /* DOS Error values    */
 * 3) include 
 * 4) include 
 * 5) include 

int main(void) { HFILE hfFileHandle   = 0L;     /* Handle for file being manipulated */ ULONG ulAction       = 0;      /* Action taken by DosOpen */ ULONG ulBytesRead    = 0;      /* Number of bytes read by DosRead */ ULONG ulWrote        = 0;      /* Number of bytes written by DosWrite */ ULONG ulLocal        = 0;      /* File pointer position after DosSetFilePtr */ UCHAR uchFileName[20]  = "dostest.dat",     /* Name of file */ uchFileData[100] = " ";              /* Data to write to file */ APIRET rc            = NO_ERROR;            /* Return code */

/* Open the file test.dat. Use an existing file or create a new */ /* one if it doesn't exist. */  rc = DosOpen(uchFileName,                    /* File path name */                &hfFileHandle,                  /* File handle */                &ulAction,                      /* Action taken */                100L,                           /* File primary allocation */                FILE_ARCHIVED | FILE_NORMAL,    /* File attribute */                OPEN_ACTION_CREATE_IF_NEW |                OPEN_ACTION_OPEN_IF_EXISTS,     /* Open function type */                OPEN_FLAGS_NOINHERIT |                OPEN_SHARE_DENYNONE  |                OPEN_ACCESS_READWRITE,          /* Open mode of the file */                0L);                            /* No extended attribute */ if (rc != NO_ERROR) { printf("DosOpen error: return code = %u\n", rc); return 1; } else { printf ("DosOpen: Action taken = %ld\n", ulAction); } /* endif */

/* Write a string to the file */ strcpy (uchFileData, "testing...\n1...\n2...\n3\n");

rc = DosWrite (hfFileHandle,               /* File handle */                  (PVOID) uchFileData,         /* String to be written */                  sizeof (uchFileData),        /* Size of string to be written */                  &ulWrote);                   /* Bytes actually written */

if (rc != NO_ERROR) { printf("DosWrite error: return code = %u\n", rc); return 1; } else { printf ("DosWrite: Bytes written = %u\n", ulWrote); } /* endif */

/* Move the file pointer back to the beginning of the file */ rc = DosSetFilePtr (hfFileHandle,          /* File Handle */                       0L,                     /* Offset */                       FILE_BEGIN,             /* Move from BOF */                       &ulLocal);              /* New location address */ if (rc != NO_ERROR) { printf("DosSetFilePtr error: return code = %u\n", rc); return 1; }

/* Read the first 100 bytes of the file */ rc = DosRead (hfFileHandle,               /* File Handle */                 uchFileData,                 /* String to be read */                 100L,                        /* Length of string to be read */                 &ulBytesRead);               /* Bytes actually read */

if (rc != NO_ERROR) { printf("DosRead error: return code = %u\n", rc); return 1; } else { printf ("DosRead: Bytes read = %u\n%s\n", ulBytesRead, uchFileData); } /* endif */

rc = DosClose(hfFileHandle);               /* Close the file */

if (rc != NO_ERROR) { printf("DosClose error: return code = %u\n", rc); return 1; }  return NO_ERROR; } 

Related Functions

 * DosOpen
 * DosRead
 * DosSetFileSize
 * DosWrite