Jump to content

DosForceDelete

From EDM2
Revision as of 05:28, 19 December 2016 by Ak120 (talk | contribs)

Removes a file name from a directory. The deleted file is not recoverable.

Syntax

#define INCL_DOSFILEMGR
#include <os2.h>

PSZ       pszFile;  /*  Address of the name of the file to be deleted. */
APIRET    ulrc;     /*  Return Code. */

ulrc = DosForceDelete(pszFile);

Parameters

pszFile (PSZ) - input
Address of the name of the file to be deleted.

Return Code

ulrc (APIRET) - returns

DosForceDelete returns one of the following values:

  • 0 NO_ERROR
  • 2 ERROR_FILE_NOT_FOUND
  • 3 ERROR_PATH_NOT_FOUND
  • 5 ERROR_ACCESS_DENIED
  • 26 ERROR_NOT_DOS_DISK
  • 32 ERROR_SHARING_VIOLATION
  • 36 ERROR_SHARING_BUFFER_EXCEEDED
  • 87 ERROR_INVALID_PARAMETER
  • 123 ERROR_INVALID_NAME
  • 206 ERROR_FILENAME_EXCED_RANGE

Remarks

Global file-name characters are not permitted in the name of the file to be deleted.

Read-only files cannot be deleted by DosForceDelete. To delete a read-only file, you must first issue DosSetFileInfo to change the file's read-only attribute to zero, then delete the file.

The deleted file cannot be recovered with the UNDELETE command. You may want to issue DosForceDelete to delete a temporary file that you would not want to recover.

DosForceDelete cannot be used to delete directories. Issue DosDeleteDir to delete a directory.

Example Code

This example creates a read-only file named "DOSFDEL.DAT", it then changes the file attributes. DosForceDelete is used to delete this file so it is not possible to restore it 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 DosOpen  */
 FILESTATUS3 fsts3FileInfo   = {{0}};  /* Information associated with file   */
 ULONG       ulBufferSize    = sizeof(FILESTATUS3); /* File info buffer size */
 ULONG       ulOpenAction    = 0;                 /* Action taken by DosOpen */
 APIRET      rc              = NO_ERROR;          /* Return code             */

                 /* Create a read-only file */

  rc = DosOpen(uchFileName, &fhDelFile,
               &ulOpenAction, 10L, FILE_READONLY,
               OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS,
               OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, 0L);
  if (rc != NO_ERROR) {
     printf("DosOpen error: return code = %u\n", rc);
     return 1;       }

  rc = DosQueryFileInfo(fhDelFile, FIL_STANDARD,
                        &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_STANDARD,
                        &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;
}

Related Functions