Purpose
DosSetFilePtrL moves the read write pointer according to the type of move specified.
Syntax
#define INCL DOSFILEMGR #include os2.h
APIRET DosSetFilePtrL
Parameters
hFile HFILE) input
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
Move the pointer from the beginning of the file.
Move the pointer from the current location of the read write pointer.
Move the pointer from the end of the file. Use this method to determine a file s size.
Returns
ulrc APIRET) returns
DosSetFilePtrL returns one of the following values
132
Remarks
The read/write pointer in a file is a signed 64-bit number. A negative value for ib moves the pointer backward in the file; a positive value moves it forward. DosSetFilePtrL cannot be used to move to a negative position in the file.
DosSetFilePtrL cannot be used for a character device or pipe.
Related Functions
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.
#define INCL_DOSFILEMGR /* File Manager values */#define INCL_DOSERRORS /* DOS Error values */ #include os2.h #include stdio.h #include string.h int main(void) HFILE hfFileHandle = 0L; /* Handle for file being manipulated */ ULONG ulAction = 0; /* Action taken by DosOpenL */ ULONG ulBytesRead = 0; /* Number of bytes read by DosRead */ ULONG ulWrote = 0; /* Number of bytes written by DosWrite */ LONGLONG ullLocal = 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 = DosOpenL(uchFileName, /* File path name */ hfFileHandle, /* File handle */ ulAction, /* Action taken */ (LONGLONG)100, /* 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("DosOpenL error return code = %u\n", rc); return 1; else printf ("DosOpenL 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 = DosSetFilePtrL (hfFileHandle, /* File Handle */ (LONGLONG)0, /* Offset */ FILE_BEGIN, /* Move from BOF */ ullLocal); /* New location address */ if (rc != NO_ERROR) printf("DosSetFilePtrL 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;