DosSetCurrentDir

Defines the current directory.

Syntax

 * 1) define INCL_DOSFILEMGR
 * 2) include 

PSZ      pszDir;  /*  Address of the directory path name. */ APIRET   ulrc;    /*  Return Code. */

ulrc = DosSetCurrentDir(pszDir); 

Parameters

 * pszDir (PSZ) - input : Address of the directory path name.
 * The name is an ASCIIZ string.

Return Code
ulrc (APIRET) - returns DosSetCurrentDir returns one of the following values:
 * 0 NO_ERROR
 * 2 ERROR_FILE_NOT_FOUND
 * 3 ERROR_PATH_NOT_FOUND
 * 5 ERROR_ACCESS_DENIED
 * 8 ERROR_NOT_ENOUGH_MEMORY
 * 26 ERROR_NOT_DOS_DISK
 * 87 ERROR_INVALID_PARAMETER
 * 108 ERROR_DRIVE_LOCKED
 * 206 ERROR_FILENAME_EXCED_RANGE

Remarks
The directory path does not change if any member of the path does not exist. The current directory changes only for the requesting process.

For file-system drivers, the case of the current directory is set by pszDir, and not by the case of the directories on the disk. For example, if the directory "c:\bin" is created, and a pszDir value of "c:\bin," is specified, the current directory returned by DosQueryCurrentDir will be "c:\bin."

Programs running without the NEWFILES bit can set the current directory to a non-8.3 file-name format.

An application must issue DosQuerySysInfo to determine the maximum path length that the operating system supports. The returned value should be used to dynamically allocate buffers that are to be used to store paths.

Example Code
This example creates a new directory called "TEMPPROG" in the root directory, access it, and finally removes it. Some return code checking is omitted for brevity. 
 * 1) define INCL_DOSFILEMGR  /* File Manager values */
 * 2) define INCL_DOSERRORS   /* DOS Error values    */
 * 3) include 
 * 4) include 
 * 5) include 

int main(VOID) { UCHAR  achOrigDirName[256] = "";            /* Original directory name  */ UCHAR  achNewDirName[256]  = "\\TEMPPROG";  /* New directory to create  */ UCHAR  achDirName[256]     = "";          /* Directory name for queries */ ULONG  cbDirPathLen    = 0;               /* Length of directory path   */ PEAOP2 pEABuf       = NULL;   /* Extended Attribute buffer pointer      */ ULONG  ulDriveNum   = 0;      /* Drive number: current=0, A=1, B=2, ... */  APIRET  rc           = NO_ERROR;      /* Return code                     */

cbDirPathLen = (ULONG) sizeof(achOrigDirName); rc = DosQueryCurrentDir(ulDriveNum, achOrigDirName, &cbDirPathLen);

if (rc != NO_ERROR) { printf("DosQueryCurrentDir error: return code = %u\n", rc); return 1; } else printf ("Original dir. = \\%s\n", achOrigDirName);

pEABuf = NULL; /* Indicate no EAs are to be defined for the directory  */ rc = DosCreateDir(achNewDirName, pEABuf);  /* Create the new directory */

if (rc != NO_ERROR) { printf("DosCreateDir error: return code = %u\n", rc); return 1; }

rc = DosSetCurrentDir (achNewDirName);  /* Change to new directory     */

ulDriveNum = 0; cbDirPathLen = (ULONG) sizeof(achDirName); rc = DosQueryCurrentDir(ulDriveNum, achDirName, &cbDirPathLen);

if (rc != NO_ERROR) { printf("DosQueryCurrentDir error: return code = %u\n", rc); return 1; } else printf ("Current dir. = \\%s\n", achDirName);

strcpy(achDirName,"\\");

rc = DosSetCurrentDir (achDirName);    /* Change to root directory     */ rc = DosDeleteDir (achNewDirName);     /* Delete the new directory     */

return NO_ERROR; } 

Related Functions

 * DosQueryCurrentDir
 * DosQueryCurrentDisk
 * DosQuerySysInfo
 * DosSetDefaultDisk