Gettree('c:\Program Files',.t.) Function Gettree Lparameters tcDirectory, tlFiles *Start = seconds() 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) *? seconds()-start select crsFiles index on FolderId tag FolderID select Folder, Filename , FileSize , Created , Modified , Accessed ; from crsFolders join crsFiles on crsFolders.FolderId = crsFiles.FolderId 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