Files
tasks/programe/xrecurse.prg
2026-04-21 15:46:20 +03:00

102 lines
2.5 KiB
Plaintext

* Test Source Code
x=CREATE('FilesList')
*!* SET TEXTMERGE ON TO TestRecurse NOSHOW
x.FileExtensions = 'sql'
x.Recurse("D:\ROA_RB\DATABASE\SCRIPTURI\")
*!* SET TEXTMERGE TO
*!* MODI COMM TestRecurse.txt
DEFINE CLASS FilesList AS Recurse
*
PROCEDURE INIT
DODEFAULT()
CREATE CURSOR dirlist (DirName C(100), FileName C(250) , FileExt C(3), ;
rty C(1), FileAttr C(5), FileSize N(12,1), DateMod D, TimeMod C(12))
ENDPROC && Init
*
*!* PROCEDURE ProcessDir(tcDir, tcParentDir)
*!* DODEFAULT()
*!* ENDPROC
PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr)
LOCAL loRec
IF !USED('dirlist')
RETURN
ENDIF
SELECT dirlist
SCATTER NAME loRec BLANK
WITH loRec
.rty='F'
.DirName = JUSTPATH(tcFile)
.FileAttr = tcAttr
.FileName = JUSTFNAME(tcFile)
.FileExt = JUSTEXT(tcFile)
.FileSize = IIF(tnSize > 0, ROUND(tnSize/1024,1) ,0 )
.DateMod = tdLastMod
.TimeMod = tcTime
ENDWITH
if len(allt(this.FileExtensions)) > 0
if atc(loRec.FileExt , this.FileExtensions ) = 0
return
endif
endif
INSERT INTO dirlist FROM NAME loRec
ENDPROC && ProcessFile
ENDDEFINE && FilesList
DEFINE CLASS Recurse AS CUSTOM
FileExtensions = "" && what file extensions it process
PROCEDURE ProcessFile(tcFile, tnSize, tdLastMod, tcTime, tcAttr)
* Abstract Method to be overridden in subclasses that actually do something
ENDPROC
PROCEDURE ProcessDir(tcDir, tcParentDir)
* Override this method as desired.
ENDPROC
FUNCTION Recurse
LPARAMETERS pcDir
LOCAL lnPtr, lnFileCount, laFileList, lcDir, lcFile, lcCurDir
lcCurDir = FULLPATH(CURDIR())
CHDIR (pcDir)
*? 'Dir -> ' + FULLPATH(CURDIR())
DIMENSION laFileList[1]
*--- Read the chosen directory.
lnFileCount = ADIR(laFileList, '*.*', 'D')
FOR lnPtr = 1 TO lnFileCount
IF 'D' $ laFileList[lnPtr, 5]
*--- Get directory name.
lcDir = laFileList[lnPtr, 1]
*--- Ignore current and parent directory pointers.
IF lcDir != '.' AND lcDir != '..'
*--- Call this routine again.
THIS.ProcessDir(lcDir, pcDir)
THIS.Recurse(ADDBS(pcDir)+lcDir)
ENDIF
ELSE
*--- Get the Long file name and process it:
THIS.ProcessFile( ADDBS(pcDir)+laFileList[lnPtr, 1], laFileList[lnPtr, 2], laFileList[lnPtr, 3], laFileList[lnPtr, 4], laFileList[lnPtr, 5] )
ENDIF
ENDFOR
*--- Move back to parent directory.
CHDIR (lcCurDir)
RETURN
ENDFUNC
ENDDEFINE