DosProtectSetFilePtrL

DosProtectSetFilePtrL moves the read or write pointer according to the type of move specified.

Syntax
DosProtectSetFilePtrL (hFile, ib, method, ibActual, fhFileHandleLockID)

Parameters

 * hFile (HFILE) input : The handle returned by a previous DosOpenL function.
 * ib (LONGLONG) input : The signed distance (offset) to move, in bytes.
 * method (LONG) input : The method of moving.
 * This field specifies the location in the file at which the read/write pointer starts before adding the ib offset. The values and their meanings are as shown in the following list:
 * FILE_BEGIN  Move the pointer from the beginning of the file.
 * FILE_CURRENT Move the pointer from the current location of the read/write pointer.
 * FILE_END    Move the pointer from the end of the file.
 * Use this method to determine a file s size.


 * ibActual (PLONGLONG) output: Address of the new pointer location.
 * fhFileHandleLockID (FHLOCK) input: The filehandle lockid returned by a previous DosProtectOpenL.

Return Code

 * ulrc APIRET) returns:DosProtectSetFilePtrL returns one of the following values:
 * 0 NO_ERROR
 * ERROR_INVALID_FUNCTION
 * 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 64-bit number. A negative value for ib moves the pointer backward in the file; a positive value moves it forward. DosProtectSetFilePtrL cannot be used to move to a negative position in the file.

DosProtectSetFilePtrL cannot be used for a character device or pipe.

Example Code
This example opens or creates and opens a file named DOSPROT.DAT, writes a string to it, returns the file pointer to the beginning of the file, reads it, and finally closes it using DosProtect functions. 
 * 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; ULONG ulAction       = 0; ULONG ulBytesRead    = 0; ULONG ulWrote        = 0; LONGLONG ullLocal    = 0; UCHAR uchFileName 20   = "dosprot.dat", uchFileData 100 = " "; FHLOCK FileHandleLock = 0;       /* File handle lock   */ APIRET rc            = NO_ERROR; /* Return code */

/* Open the file test.dat. Make it read/write, open it */ /* if it already exists and create it if it is new. */ rc = DosProtectOpenL(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   */                 FileHandleLock);               /* File handle lock id     */ if (rc != NO_ERROR){ printf("DosProtectOpenL error return code = %u\n", rc); return 1; } else { printf ("DosProtectOpenL Action taken = %u\n", ulAction); } /* endif */

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

rc = DosProtectWrite (hfFileHandle,      /* File handle                  */                 (PVOID) uchFileData,       /* String to be written         */                 sizeof (uchFileData),      /* Size of string to be written */                  ulWrote,                  /* Bytes actually written       */                 FileHandleLock);           /* File handle lock id          */ if (rc != NO_ERROR) { printf("DosProtectWrite error return code = %u\n", rc); return 1; } else { printf ("DosProtectWrite Bytes written = %u\n", ulWrote); } /* endif */

/* Move the file pointer back to the beginning of the file */ rc = DosProtectSetFilePtrL (hfFileHandle,  /* File Handle          */                      (LONGLONG)0,            /* Offset               */                      FILE_BEGIN,             /* Move from BOF        */                       ullLocal,              /* New location address */                      FileHandleLock);        /* File handle lock id  */ if (rc != NO_ERROR) { printf("DosSetFilePtr error return code = %u\n", rc); return 1;

/* Read the first 100 bytes of the file */ rc = DosProtectRead (hfFileHandle,        /* File Handle                 */                 uchFileData,                 /* String to be read           */                 100L,                        /* Length of string to be read */                  ulBytesRead,                /* Bytes actually read         */                 FileHandleLock);             /* File handle lock id         */ if (rc != NO_ERROR) { printf("DosProtectRead error return code = %u\n", rc); return 1; } else { printf("DosProtectRead Bytes read = %u\n%s\n", ulBytesRead, uchFileData); } /* endif */

rc = DosProtectClose(hfFileHandle, FileHandleLock);  /* Close the file */ if (rc != NO_ERROR) { printf("DosProtectClose error return code = %u\n", rc); return 1; } return NO_ERROR; } 

Related Functions

 * DosProtectOpenL
 * DosProtectRead
 * DosProtectSetFileSizeL
 * DosProtectWrite