/* example code to check if a file exists. This function also checks, */ /* if the name is already used by a directory or a device (e.g. CON) */ /* Note that this routine won't find hidden or system files. */ do until fileName = "" call charOut, "Enter a filename to check: " fileName = lineIN() say "The result of FileExist(" || fileName || ") is: " || , FileExist( fileName ) /* v2.60 */ end /* do until iLIne = "" */ exit 0 /* ------------------------------------------------------------------ */ /* function: Check if a file exists */ /* */ /* call: FileExist fileToTest */ /* */ /* where: fileToTest - name of the file to test */ /* */ /* returns: -2 - invalid parameter */ /* -1 - cannot detect (e.g. the drive is not ready) */ /* 0 - neither a file, a device nor a directory with this */ /* name exist */ /* 1 - the file exist */ /* 2 - a device driver with the name exists */ /* 3 - a directory with the name exists */ /* */ FileExist: PROCEDURE parse arg fileName /* v2.90 */ /* install temporary error handler */ SIGNAL ON NOTREADY NAME FileExistError SIGNAL ON FAILURE NAME FileExistError SIGNAL ON ERROR NAME FileExistError thisRC = -2 /* rc = -2 ->> invalid parameter */ /* check the parameter */ if strip( fileName ) <> "" then do thisRC = -1 /* rc = -1 ->> cannot detect the result */ /* check if the drive with the file is ready */ call stream fileName /* turn of some error handling so we can */ /* determine if the given name is the name of */ /* a device (for example "LPT1") */ SIGNAL OFF NOTREADY if stream( fileName, "c", "QUERY EXISTS" ) <> "" then do /* seems that the file exists -- check if */ /* it is a device */ if stream( fileName, "c", "QUERY DATETIME" ) == "" then thisRC = 2 /* rc = 2 ->> this is a device name */ else thisRC = 1 /* rc = 1 ->> this is a file name */ end /* if stream( ... */ else do /* seems that the file does not exist -- */ /* check if a directory with the name for the */ /* file exist */ /* save the current directory of the current */ /* drive */ thisDir = directory() /* save the current directory of the drive */ /* with the file to check */ tempDir = directory( fileSpec( "Drive", fileName ) ) if directory( fileName ) <> "" then thisRC = 3 /* rc = 3 ->> a dir with this name exists */ else thisRC = 0 /* rc = 0 ->> neither a file, a device nor a */ /* dir with this name exists */ /* restore the current directory of the drive */ /* with the directory to check */ call directory tempDir /* restore the current directory of the */ /* current drive */ call directory thisDir end /* else */ end /* if strip( fileName ) <> "" then */ FileExistError: RETURN thisRC