Has Anyone Got A Directory "Walker" Available
Ali Lloyd
ali.lloyd at livecode.com
Sat Apr 21 04:14:00 EDT 2018
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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list