DosForceDelete

From EDM2
Jump to: navigation, search

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

Syntax

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