Jump to content

DosSetFileSizeL

From EDM2
Revision as of 16:10, 25 November 2016 by Ak120 (talk | contribs)

Description

DosSetFileSizeL changes the size of a file.

Syntax

#define INCL DOSFILEMGR
#include  os2.h 

APIRET DosSetFileSizeL (HFILE hFile, LONGLONG cbSize)

Parameters

hFile HFILE) input
The handle of the file whose size to be changed.
cbSize LONGLONG) input
The new size, in bytes, of the file.

Return Code

ulrc APIRET) returns

DosSetFileSizeL returns one of the following values:

  • 0 NO_ERROR
  • ERROR_ACCESS_DENIED
  • ERROR_INVALID_HANDLE
  • 26 ERROR_NOT_DOS_DISK
  • 33 ERROR_LOCK_VIOLATION
  • 87 ERROR_INVALID_PARAMETER
  • 112 ERROR_DISK_FULL

Remarks

When DosSetFileSizeL is issued, the file must be open in a mode that allows write access.

The size of the open file can be truncated or extended. If the file size is being extended, the file system tries to allocate additional bytes in a contiguous (or nearly contiguous) space on the medium. The values of the new bytes are undefined.

Example Code

This example writes to a file named DOSMAN.DAT, resets the buffer, and changes the file size.

#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  ulWrote        = 0;      /* Number of bytes written by DosWrite */
UCHAR  uchFileName 20  = "dosman.dat",     /* Name of file */
uchFileData 4    = "DATA";            /* Data to write to file */
APIRET rc             = NO_ERROR;            /* Return code */

/* Open the file dosman.dat.  Use an existing file or create a new */
/* one if it doesn't exist.                                      */
rc = DosOpenL(uchFileName,  hfFileHandle,  ulAction, (LONGLONG)4,
FILE_ARCHIVED | FILE_NORMAL,
OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS,
OPEN_FLAGS_NOINHERIT | OPEN_SHARE_DENYNONE  |
OPEN_ACCESS_READWRITE, 0L);
if (rc != NO_ERROR)  
printf("DosOpenL error  return code = %u\n", rc);
return 1;

rc = DosWrite (hfFileHandle, (PVOID) uchFileData,
sizeof (uchFileData),  ulWrote);
if (rc != NO_ERROR)  
printf("DosWrite error  return code = %u\n", rc);
return 1;

rc = DosResetBuffer (hfFileHandle);
if (rc != NO_ERROR)  
printf("DosResetBuffer error  return code = %u\n", rc);
return 1;
  /* endif */

rc = DosSetFileSizeL (hfFileHandle, (LONGLONG)8);    /* Change file size */
if (rc != NO_ERROR)  
printf("DosSetFileSizeL error  return code = %u\n", rc);
return 1;

return NO_ERROR;

Related Functions