Has Anyone Got A Directory "Walker" Available

Richard Gaskin ambassador at fourthworld.com
Fri Apr 20 14:49:28 EDT 2018


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
 >






More information about the Use-livecode mailing list