Now that we have files(pFolder), folder(pFolder) (and files(pFolder, "detailed"), folders(pFolder, "detailed")), directory walking code can be improved somewhat by not having to set the current folder.
Actually, I haven't checked what happens when you get files(pRestrictedFolder) On Fri, Apr 20, 2018 at 7:49 PM Richard Gaskin via use-livecode < use-livecode@lists.runrev.com> wrote: > You may recall the dreaded recursion errors that have cropped up in > discussions of directory walkers. They happen not because anyone has > directory trees > 40,000 folders deep, but because a permissions > restriction can prevent going into a subdirectory, causing the current > directory to be traversed again and again until the recursion error is > thrown. > > The way to avoid this is to add an error check when setting the > directory, e.g.: > > set the directory to pFolder > if the result is not empty then > -- skip or report as needed > end if > > > -- > Richard Gaskin > Fourth World Systems > > > Sannyasin Brahmanathaswami wrote: > > > I found this in a toolbox. Sent by some ago, by a LiveCode deva > > > > For what it's worth : > > > > # Filters the strings "." and ".." from a list > > function filterDots pList > > local tList > > > > put pList into tList > > filter tList without "." > > filter tList without ".." > > > > return tList > > end filterDots > > # Returns a filtered list of files in the current directory > > function filteredFiles > > return filterDots(the files) > > end filteredFiles > > > > # Returns a filtered list of folders in the current directory > > function filteredFolders > > return filterDots(the folders) > > end filteredFolders > > > > # Returns a list of files in the current directory including > > # each file's full path. > > function filteredFilesWithPaths > > local tFiles, tFilesWithPaths > > > > put filteredFiles() into tFiles > > repeat for each line tFile in tFiles > > put the directory & slash & tFile & return after \ > > tFilesWithPaths > > end repeat > > delete the last char of tFilesWithPaths > > > > return tFilesWithPaths > > end filteredFilesWithPaths > > > > > > # Returns a list of files in a given folder, using recursion to > > # include files in subfolders if desired. > > function listFiles pFolder, pRecurse > > local tTotalFiles, tCurrentFiles, tFolders > > > > set the directory to pFolder > > put filteredFiles() into tCurrentFiles > > if not pRecurse then return tCurrentFiles > > if tCurrentFiles is not empty then > > put tCurrentFiles & return after tTotalFiles > > end if > > put filteredFolders() into tFolders > > > > repeat for each line tFolder in tFolders > > put listFiles((pFolder & slash & tFolder), pRecurse) into \ > > tCurrentFiles > > if tCurrentFiles is not empty then > > put tCurrentFiles & return after tTotalFiles > > end if > > end repeat > > delete the last char of tTotalFiles > > > > return tTotalFiles > > end listFiles > > > > # Returns a list of files with their containing folders, using > > # recursion > > # if desired to descend into sub folders. > > function listFilesWithFolders pFolder, pRecurse > > local tTotalFiles, tCurrentFiles, tFolders > > > > set the directory to pFolder > > put filteredFiles() into tCurrentFiles > > if not pRecurse then return pFolder & return & "--" & return \ > > & tCurrentFiles > > if tCurrentFiles is not empty then > > put pFolder & return & "--" & return after tTotalFiles > > put tCurrentFiles & return & return after tTotalFiles > > end if > > put filteredFolders() into tFolders > > repeat for each line tFolder in tFolders > > put listFilesWithFolders((pFolder & slash & tFolder), \ > > pRecurse) into tCurrentFiles > > if tCurrentFiles is not empty then put tCurrentFiles & \ > > return after tTotalFiles > > end repeat > > delete the last char of tTotalFiles > > > > return tTotalFiles > > end listFilesWithFolders > > > > # Returns a list of files with the full paths > > function listFilesWithPaths pFolder, pRecurse > > local tTotalFiles, tCurrentFiles, tFolders > > > > set the directory to pFolder > > put filteredFilesWithPaths() into tCurrentFiles > > if not pRecurse then return tCurrentFiles > > if tCurrentFiles is not empty then put tCurrentFiles & \ > > return after tTotalFiles > > put filteredFolders() into tFolders > > repeat for each line tFolder in tFolders > > put listFilesWithPaths((pFolder & slash & tFolder), \ > > pRecurse) into tCurrentFiles > > if tCurrentFiles is not empty then put tCurrentFiles & \ > > return after tTotalFiles > > end repeat > > delete the last char of tTotalFiles > > > > return tTotalFiles > > end listFilesWithPaths > > > > # Returns a sorted list of the files in pFolder. Again using > > # recursion if > > # required. > > function listSortedFiles pFolder, pRecurse > > local tFiles > > > > put listFiles(pFolder, pRecurse) into tFiles > > sort lines of tFiles by listSortedFilesSortKey(each) > > > > return tFiles > > end listSortedFiles > > > > # Used by the listSortedFiles() function. Returns a sort key > > # from each file's name to > > # allow the sorting to be fully customized. > > function listSortedFilesSortKey pFile > > # Use this value for a normal text sort > > return pFile > > end listSortedFilesSortKey > > > > > > on doSomething pFile > > put pFile & return after msg > > end doSomething > > > > --This will achieve similar results to listing the files except that > > it will be slower because text has to be drawn to the screen at each > > iteration. > > > > # Use this template function to perform an action on each file > > # in a folder > > on doForEachFile pFolder, pRecurse > > set the directory to pFolder > > repeat for each line tFile in filteredFiles() > > doSomething (pFolder & slash & tFile) > > end repeat > > if pRecurse then > > repeat for each line tFolder in filteredFolders() > > doForEachFile (pFolder & slash & tFolder), pRecurse > > end repeat > > end if > > end doForEachFile > > > > > > > > I have directory available this days of Ken Ray, in the on system > > of set the default folder and get the the files, registered that path. > > descend recursively to the level… etc. > > > > Do anyone has a new one handy they could share using the folder > > and file function? > > > > BR > > > > > > _______________________________________________ > use-livecode mailing list > use-livecode@lists.runrev.com > Please visit this url to subscribe, unsubscribe and manage your > subscription preferences: > http://lists.runrev.com/mailman/listinfo/use-livecode _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode