Purpose
DosSetFileInfo sets file information.
Syntax
#define INCL DOSFILEMGR #include os2.h
APIRET DosSetFileInfo
Parameters
hf HFILE) input
Specify a value
Level 1 file information
11
Level 11 file information
Level 2 file information
Level 1 File Information (ulInfoLevel == FIL_STANDARD)
Input
Returns
ulrc APIRET) returns
DosSetFileInfo returns one of the following values
87
Remarks
DosSetFileInfo is successful only when the file is opened for write access, and access by other processes is prevented by a deny-both sharing mode. If the file is already opened with conflicting sharing rights, any call to DosOpen will fail.
A value of 0 in the date and time components of a field does not change the field. For example, if both last write date and last write time are specified as 0 in the Level 1 information structure, then both attributes of the file are left unchanged. If either last write date or last write time are other than 0, both attributes of the file are set to the new values.
In the FAT file system, only the dates and times of the last write can be modified. Creation and last-access dates and times are not affected.
The last-modification date and time will be changed if the extended attributes are modified.
Related Functions
Example Code
This example creates a read-only file named DOSFDEL.DAT , and then changes the file attributes. It uses DosForceDelete to delete the file so it cannot be restored using UNDELETE.
#define INCL_DOSFILEMGR /* File Manager values */#define INCL_DOSERRORS /* DOS error values */ #include os2.h #include stdio.h int main(VOID) UCHAR uchFileName = "DOSFDEL.DAT"; /* File we want to delete */ HFILE fhDelFile = 0; /* File handle from DosOpenL */ FILESTATUS3L fsts3FileInfo = 0 ; /* Information associated with file */ ULONG ulBufferSize = sizeof(FILESTATUS3L); /* File info buffer size */ ULONG ulOpenAction = 0; /* Action taken by DosOpenL */ APIRET rc = NO_ERROR; /* Return code */ /* Create a read-only file */ rc = DosOpenL(uchFileName, fhDelFile, ulOpenAction, (LONGLONG)10, FILE_READONLY, OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS, OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, 0L); if (rc != NO_ERROR) printf("DosOpenL error return code = %u\n", rc); return 1; rc = DosQueryFileInfo(fhDelFile, FIL_STANDARDL, fsts3FileInfo, ulBufferSize); /* Get standard info */ if (rc != NO_ERROR) printf("DosQueryFileInfo error return code = %u\n", rc); return 1; else printf("File %s created read-only.\n",uchFileName); fsts3FileInfo.attrFile = FILE_NORMAL; rc = DosSetFileInfo(fhDelFile, FIL_STANDARDL, fsts3FileInfo, ulBufferSize); if (rc != NO_ERROR) printf("DosSetFileInfo error return code = %u\n", rc); return 1; rc = DosClose(fhDelFile); /* should check (rc != NO_ERROR) here... */ /* Delete the file */ rc = DosForceDelete(uchFileName); if (rc != NO_ERROR) printf("DosForceDelete error return code = %u\n", rc); return 1; else printf("File %s has been deleted.\n",uchFileName); /* endif */ return NO_ERROR;