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) EndforCetin