Has Anyone Got A Directory "Walker" Available
Ali Lloyd
ali.lloyd at livecode.com
Sat Apr 21 04:15:38 EDT 2018
Ah, it will throw an error - so best to use try / catch around the function
calls.
On Sat, Apr 21, 2018 at 9:13 AM Ali Lloyd <ali.lloyd at livecode.com> wrote:
> 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