Gettree(getdir(),.t.) >browse > >Function Gettree >Lparameters tcDirectory, tlFiles >Create cursor crsFiles ; > (FolderId i, Filename m, FileSize i, Created t, Modified t, Accessed t) >Create cursor crsFolders (Folder m, FolderId i) > >oFS = CREATEOBJECT('Scripting.FileSystemObject') >oFolder = oFS.GetFolder(tcDirectory) >Insert into crsFolders ; > (Folder , FolderId ) ; > values ; > (oFolder.Path, reccount('crsFolders')+1) >If tlFiles > GetFiles(oFolder, reccount('crsFolders')) >Endif > >tcDirectory = iif(oFolder.IsRootFolder(), substr(tcDirectory,1,len(tcDirectory)-1), tcDirectory) >=_SubFolders(oFolder, tcDirectory, tcDirectory,tlFiles) >select crsFiles >index on FolderId tag FolderID >local array arrFolderSize[1], arrFileNameSize[1] >local lnFolderSize, lnFileNameSize > >select max(len(Folder)) from crsFolders into array arrFolderSize >select max(len(Filename)) from crsFiles into array arrFileNameSize >lnFolderSize = min(254,arrFolderSize) >lnFileNameSize = min(254, arrFileNameSize) > >select padr(Folder,lnFolderSize), padr(Filename,lnFileNameSize) , ; > FileSize , Created , Modified , Accessed ; > from crsFolders join crsFiles on crsFolders.FolderId = crsFiles.FolderId ; > into cursor crsResult > >Function _SubFolders >Lparameters toFolder, tcPath, tcStartPath, tlFiles >Local loSubFolders >tcPath = tcStartPath >For each oSubFolder in toFolder.Subfolders > If oSubFolder.Name # "System Volume Information" > Insert into crsFolders ; > (Folder , FolderId ) ; > values ; > (oSubFolder.Path, reccount('crsFolders')+1) > If tlFiles > GetFiles(oSubFolder, reccount('crsFolders')) > Endif > =_SubFolders(oSubFolder, tcPath, tcPath+"\"+ oSubFolder.name, tlFiles) > Endif >Endfor > >Function GetFiles >Lparameters toFolder, tnId >For each oFile in toFolder.Files > Insert into crsFiles ; > (FolderId, Filename, FileSize, Modified, Accessed , Created ) ; > values ; > (tnId, oFile.Name, oFile.Size, ; > oFile.DateCreated, oFile.DateLastModified, oFile.DateLastAccessed) >Endfor >>Cetin