|
Cool - thanks for this present,
Emmitt!
David
----- Original Message -----
From: Emmitt Dove
Sent: Tuesday, February 22, 2005 8:32 AM
Subject: [RBG7-L] - Re: Reliable Way to Check for a Network
Folder? Here is a stored procedure I wrote that will check for the existence of a folder, create it if it does not exist, or tell you if it cannot create it. UNCs, relative paths and full mapped drive paths all work. It is self-documenting. You can also call it without a filename or with /? for help. --- dchkdir.prc stored procedure to check for the existence of a directory, --- and make it if not found --- 05/17/04 Emmitt Dove/Blue Ridge Paper Products, Inc. --- --- usage: set var vx INTEGER = (call dchkdir(.vdirname)) where vdirname is --- the name of the directory to create if it does not exist --- --- note: unc, absolute and relative pathnames acceptable --- --- note: if only checking for the existence of a directory, use (chkfile()) --- built-in function --- --- to create the stored procedure do this: --- --- PUT dchkdir.prc AS dchkdir pdirname TEXT RETURN INTEGER + --- COMMENT 'Directory check/make' --- --- directory name will be in variable pdirname --- --- procedure will return 1 if successful or directory already exists, 0 if --- directory does not exist and could not be created -- if help was requested or invalid input: IF pdirname = (CHAR(32)) OR pdirname = '/?' OR pdirname IS NULL OR pdirname = '' THEN SET VAR pmsg ='Procedure: dchkdir - check for existence of a directory' SET VAR pmsg = (CTXT(.pmsg)&CTXT('and create')+CHAR(013)) SET VAR pmsg = (CTXT(.pmsg)&CTXT(' it if not found')+ +CHAR(013)+CHAR(013)) SET VAR pmsg = (CTXT(.pmsg)+CTXT('Usage: SET VAR vx INTEGER = (CALL')+ &CTXT('dchkdir(dirname))')+CHAR(013)) SET VAR pmsg = (CTXT(.pmsg)&CTXT(' where "dirname" is the name')+ &CTXT('of the directory to create')+CHAR(013)+CHAR(013)) SET VAR pmsg = (CTXT(.pmsg)+CTXT('Return: 0 = directory not found')+ &CTXT('and could not be created')+CHAR(013)) SET VAR pmsg = (CTXT(.pmsg)+CTXT('Return: 1 = directory found or')+ &CTXT('created')) -- which version of R:Base are we running? SET VAR pversion = (CVAL('version')) SET VAR pversion = (SSUB(.pversion,3)) IF (SGET(.pversion,1,9)) = '7' THEN PAUSE 2 USING .pmsg + CAPTION 'Stored Procedure dchkdir Help' BUTTON 'OK' + OPTION ICON_FILE icons\information.bmp|BACK_COLOR 8404992|+ MESSAGE_COLOR 8404992|MESSAGE_FONT_COLOR 16777215|+ BUTTON_COLOR 16747804|BUTTON_FONT_COLOR 16777215 ELSE PAUSE 2 USING .pmsg=80 ENDIF CLEAR VAR p% RETURN 1 ENDIF -- first test for existence SET VAR pexist INTEGER = (CHKFILE(.pdirname)) IF pexist = 1 THEN -- directory already exists CLEAR VAR p% RETURN 1 ENDIF SET VAR pcmd = (CTXT('mkdir')&CTXT(.pdirname)) &pcmd SET VAR pexist INTEGER = (CHKFILE(.pdirname)) IF pexist = 1 THEN -- directory successfully created CLEAR VAR p% RETURN 1 ENDIF -- directory not created; are there backslashes in the path other than -- the first two characters? If so, pick the path apart and make each -- subsequent directory SET VAR pexist INTEGER = (SLOC(.pdirname,'\')) IF pexist = 0 THEN -- no backslashes; cannot do RETURN 0 ENDIF -- are the first or third characters a backslash? IF pexist = 1 THEN -- first is a backslash; is the second? SET VAR ptest = (SGET(.pdirname,1,2)) IF ptest = '\' THEN -- pdirname starts as a unc name; need to find position of second -- following backslash since first part of unc name is server name and -- second part is share name; cannot create directory which is server name -- or share name SET VAR ploc = 2 SET VAR plen = (SLEN(.pdirname)) SET VAR psuccess INTEGER = 1 SET VAR pcount INTEGER = 0 WHILE ploc < .plen THEN SET VAR ploc = (.ploc + 1) SET VAR ptest = (SGET(.pdirname,1,.ploc)) IF ptest = '\' THEN IF pcount = 0 THEN -- found first; this delimts server name SET VAR pcount = 1 ELSE -- found second occurrence after leading backslashes; this delimts -- share name; set starting position one more SET VAR pstartpos = (.ploc + 1) BREAK ENDIF ENDIF IF ploc = .plen THEN -- got through entire unc without another backslash; invalid -- entry SET VAR psuccess INTEGER = 0 BREAK ENDIF ENDWHILE IF psuccess = 0 THEN RETURN 0 ENDIF ELSE -- only first character is a backslash; SET VAR pstartpos = 2 ENDIF ELSE IF pexist = 3 THEN -- third character is a backslash; is second a colon? SET VAR ptest = (SGET(.pdirname,1,2)) IF ptest = ':' THEN -- we apparently have a drive spec included SET VAR pstartpos = 4 ELSE SET VAR pstartpos = 1 ENDIF ELSE SET VAR pstartpos = 1 ENDIF ENDIF SET VAR ploc INTEGER = (.pstartpos - 1) SET VAR plen = (SLEN(.pdirname)) SET VAR psuccess INTEGER = 1 WHILE ploc < .plen THEN SET VAR ploc = (.ploc + 1) SET VAR ptest = (SGET(.pdirname,1,.ploc)) IF ptest = '\' OR ploc = .plen THEN -- backslash found; try creating directory to one less than position -- unless loc = len IF ploc = .plen THEN SET VAR pdir = .pdirname ELSE SET VAR pdir = (SGET(.pdirname,(.ploc - 1),1)) ENDIF SET VAR pexist INTEGER = (CHKFILE(.pdir)) IF pexist = 0 THEN SET VAR pcmd = (CTXT('mkdir')&CTXT(.pdir)) &pcmd SET VAR pexist INTEGER = (CHKFILE(.pdir)) IF pexist = 0 THEN -- couldn't make directory SET VAR psuccess = 0 BREAK ENDIF ENDIF ENDIF ENDWHILE IF psuccess = 0 THEN -- could not make directory CLEAR VAR p% RETURN 0 ENDIF CLEAR VAR p% RETURN 1 Can someone suggest a reliable way to check for the existence of a folder on a network? Manager, DairyPak Business Systems Blue Ridge Paper Products, Inc. 40 Lindeman Drive Trumbull, CT 06611 (203) 673-2231 [EMAIL PROTECTED] [EMAIL PROTECTED] |
