DosSetFilePtr: Difference between revisions
Appearance
Created page with "==Description== Moves the read/write pointer according to the type of move specified. ==Syntax== <PRE> #define INCL_DOSFILEMGR #include <os2.h> HFILE hFile; /* The ..." |
mNo edit summary |
||
Line 14: | Line 14: | ||
ulrc = DosSetFilePtr(hFile, ib, method, ibActual); | ulrc = DosSetFilePtr(hFile, ib, method, ibActual); | ||
</PRE> | |||
==Parameters== | ==Parameters== | ||
; | ;hFile (HFILE) - input : The handle returned by a previous DosOpen function. | ||
;ib (LONG) - input : The signed distance (offset) to move, in bytes. | |||
; ib (LONG) - input : The signed distance (offset) to move, in bytes. | |||
; method (ULONG) - input : The method of moving. | ; 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: | :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== | ==Return Code== | ||
ulrc (APIRET) - returns | ulrc (APIRET) - returns | ||
DosSetFilePtr returns one of the following values: | DosSetFilePtr returns one of the following values: | ||
* 0 NO_ERROR | |||
* 0 | * 1 ERROR_INVALID_FUNCTION | ||
* 1 | * 6 ERROR_INVALID_HANDLE | ||
* 6 | * 132 ERROR_SEEK_ON_DEVICE | ||
* 132 | * 131 ERROR_NEGATIVE_SEEK | ||
* 131 | * 130 ERROR_DIRECT_ACCESS_HANDLE | ||
* 130 | |||
==Remarks== | ==Remarks== | ||
Line 133: | Line 127: | ||
return NO_ERROR; | return NO_ERROR; | ||
} | } | ||
</PRE> | |||
==Related Functions== | ==Related Functions== | ||
* [[ | * [[DosOpen]] | ||
* [[ | * [[DosRead]] | ||
* [[ | * [[DosSetFileSize]] | ||
* [[ | * [[DosWrite]] | ||
[[Category: | [[Category:Dos]] |
Revision as of 23:02, 15 November 2016
Description
Moves the read/write pointer according to the type of move specified.
Syntax
#define INCL_DOSFILEMGR #include <os2.h> HFILE hFile; /* The handle returned by a previous DosOpen function. */ LONG ib; /* The signed distance (offset) to move, in bytes. */ ULONG method; /* The method of moving. */ PULONG ibActual; /* Address of the new pointer location. */ APIRET ulrc; /* Return Code. */ ulrc = 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.
#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 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; }