? _CDIR("crsDirs", "h:\temp", "*.PDF", "SUBDIR BASIC") >... >* FUNCTION _CDIR >* Param's....: 1 - Cursor Name (R) >* : 2 - Directory >* : 3 - File search skeleton. >* : Multiple skeletons can be sepaarted by ';' (semicolon) or ',' (comma) >* : Can also be 1-d array with file skeletons >* : 4 - Options: SUBDIR - recursively scan all subdirectories >* : BASIC - creates cursor w/o aditional fields >* : >* : 5 - File attributes. Passed to ADIR as cAttribute parameter >* : 6 - Flags. Passed to ADIR as nFlag parameter >* >LPARAMETERS tcCursorName, tcPath, tvPattern, tcOpt, tcAttributes, tnFlag >LOCAL lcCursorName, laPattern[1], lcAttributes, lnFlag, lcPath, laPattern, ; > lcOpt, llRecursive, i, llBasicData > >EXTERNAL ARRAY tvPattern > >lcCursorName = UPPER(ALLTRIM(tcCursorName)) >lcPath =ADDBS(UPPER(ALLTRIM(tcPath))) > >DO CASE >CASE TYPE([ALEN(tvPattern)]) = "N" > = ACOPY(tvPattern, laPattern) >CASE ";" $ tvPattern > = ALINES(laPattern, UPPER(tvPattern), .T., ";") >CASE "," $ tvPattern > = ALINES(laPattern, UPPER(tvPattern), .T., ",") >OTHERWISE > laPattern[1] = UPPER(tvPattern) >ENDCASE > >FOR i=1 TO ALEN(laPattern) > laPattern[i] = UPPER(laPattern[i]) >ENDFOR > >lcAttributes = IIF( Empty( tcAttributes) Or VarType(tcAttributes) <> "C", "", ; > UPPER(ALLTRIM(tcAttributes))) > >lnFlag = IIF( Empty( tnFlag) Or VarType(tnFlag) <> "N", 0, tnFlag) > >lcOpt = IIF( Empty( tcOpt) Or VarType(tcOpt) <> "C", "", ; > UPPER(ALLTRIM(tcOpt))) > >llRecursive = ("SUBDIR" $ lcOpt) >llBasicData = ("BASIC" $ lcOpt) > >IF llBasicData > > CREATE CURSOR (lcCursorName) ( ; > Path C(60), ; > FileName C(64), ; > FileSize N(10), ; > FileDate D, ; > FileTime C(8), ; > FileAttr C(5)) >ELSE > CREATE CURSOR (lcCursorName) ( ; > Path C(60), ; > FileName C(64), ; > FileSize N(10), ; > FileDate D, ; > FileTime C(8), ; > FileAttr C(5), ; > FileExt C(5), ; > ProcCode C(3), ; > ProcDate D, ; > ProcTime C(8), ; > Note M) >ENDIF > >INDEX ON path + FileName TAG pfn > >= LoadOneDir(lcCursorName, lcPath , @laPattern, lcAttributes, lnFlag, lcOpt, llRecursive) > >RETURN RECCOUNT(lcCursorName) > >FUNCTION LoadOneDir(tcCursorName, tcPath, taPattern, tcAttributes, tnFlag, tcOpt, tlRecursive) >EXTERNAL ARRAY taPattern > >LOCAL lnFiles, i, laFileList[1], x, lcExtraAttr, llInclude, lcFileName, llBasicData >llBasicData = ("BASIC" $ tcOpt) > >IF NOT tlRecursive OR ("D" $ tcAttributes) > lcAttributes = tcAttributes >ELSE > lcAttributes = tcAttributes + "D" >ENDIF > >lnFiles = ADIR(laFileList, tcPath + "*.*", lcAttributes, tnFlag) >=ASORT(laFileList) > >FOR i=1 TO lnFiles > lcFileName = laFileList[i,1] > IF lcFileName = "." > LOOP > ENDIF > > IF NOT ("." $ lcFileName) > lcFileName = lcFileName + "." > ENDIF > llInclude = .F. > FOR x=1 TO ALEN(taPattern) > IF LIKE(taPattern[x], lcFileName) > llInclude = .T. > EXIT > ENDIF > ENDFOR > > IF llInclude AND ( NOT ("D" $ laFileList[i,5]) OR ("D" $ tcAttributes) ) > INSERT INTO (tcCursorName) ; > ( Path, FileName, FileSize, FileDate, FileTime, FileAttr) ; > VALUES (UPPER(tcPath), laFileList[i,1], ; > laFileList[i,2], laFileList[i,3], ; > laFileList[i,4], laFileList[i,5]) > IF NOT llBasicData > REPLACE FileExt WITH JUSTEXT(laFileList[i,1]) > ENDIF > ENDIF > > IF tlRecursive AND ("D" $ laFileList[i,5]) > *susp > = LoadOneDir(tcCursorName, ADDBS(ALLTRIM(tcPath) + ALLTRIM(laFileList[i,1])), ; > @taPattern, tcAttributes, tnFlag, tcOpt, tlRecursive) > ENDIF >ENDFOR > > >RETURN >ENDFUNC >>