File Walker

Alex Tweedly alex at tweedly.net
Tue Sep 30 19:48:14 EDT 2014


You would use it from a script something like this ....

global gHierList, gFailedFolders, gBaseLevels, gMainFolder

on mouseUp
    local tCount, tOrigDir, time1, time2
    put "" into gHierList
    put "" into gFailedFolders
    put "" into fld "fldOut"
    answer folder "Pick a folder you want to walk:"
    put it into gMainFolder
    if gMainFolder = "" then exit mouseUp
    set the itemDel to "/"
    put 0 into tCount
    put the number of items of gMainFolder into gBaseLevels
    put the directory into tOrigDir

    put "" into gHierList
    put "" into gFailedFolders
    put the millisecs into time1
    dirWalk gMainFolder
    put the millisecs into time2
    put the number of lines in gHierList && the number of lines in 
gFailedFolders && time2 - time1  & CR after msg

    set the directory to tOrigDir
    --   put gHierList into fld "fldOut"
    put gFailedFolders after fld "fldOut"
end mouseUp


On 01/10/2014 00:14, JB wrote:
> I could not get it to work.
If you want to send me (off-list) the whole script you were trying, I 
can help figure it out (btw - I'm in the UK, so I'm just about to go 
sleep for a few hours :-). Otherwise, put the script above into a 
button, and see if that works for you - then try changing it if you wich 
to get its initial location from a field, or put its output into another 
field, etc.

-- Alex.
>
> Here is what i did.  At the top
> I put the following line,
>
>   put field "Folder" into whatFolder
>
> at the bottom I tried both of these lines
> and nothing was put in the field
>     put tDirsToDo into field "list"
>     put tDirList into field “list”
>
> then I tried this line
>
> put "tDirList" into field “list”
>
> and it put the word tDirList in the vld
> as would be expected.
>
> This was accessing a folder with no
> sub folders and only a few hundred
> files.  All of the other file Lister even
> the recursive had no problems with
> this folder.  What am I supposed to be
> putting in the field?
>
> John Balgenorth
>
>
>
>
> On Sep 30, 2014, at 3:45 PM, Alex Tweedly <alex at tweedly.net> wrote:
>
>> On 30/09/2014 21:32, JB wrote:
>>> And what do you mean by folders that cannot
>>> be accessed?  Since when are they not able
>>> to be accessed?  I access them all of the time.
>>> I am a typical user who accesses files & folders
>>> everyday the same way.
>> Yes, most folders and files can be accessed. But there are *some* folders that cannot be accessed, and because File Lister tries to access every folder within the starting folder, it will find those few that cannot be accessed - even though they may never be encountered any other time.
>>
>> There are a variety of reasons for folders being inaccessible.
>>
>> 1. Permissions.
>> Try this (in Terminal or other shell).
>> mkdir sub
>> cd sub
>> pwd
>>      --- it properly shows you as being in ....../sub
>> cd ..
>> chmod 000 sub    (i.e. make the folder inaccessible)
>> cd sub
>>    -- gives an error message of permission denied
>>
>> Similarly, if you no wtry to access in Finder, it will just not "go" into that directory.
>> And if you run the original "File Lister 2", it will wrongly report a recursion limit reached; you need a safety check - whether the one I gave or another equivalent - to be added.
>>
>>
>>
>> 2. "Not really a folder"
>>
>> There are various pseudo-folders within application bundles that aren't really folders. You would be unlikely to encounter these in Finder - it doesn't even show the top level of folders with "Applications". Even in Terminal, they are hidden - but they are there, and are seen by File Lister - and in some cases they are inaccessible, so caused the apparent "recursion" error report.
>>
>> 3. This is a Livecode issue !!!   Non-ASCII characters in filenames
>> I have some albums in my iTunes library by foreign artists (Icelandic), who have characters from the extended character set in their names. In LC, those don't come out right - so they also fail with the (incorrect) recursion report. My earlier suggested addition to the code will avoid this becoming a problem - though you do still have an issue.  I suspect that with LC 7.0 this will cease to be a problem - though it might still need a "URLEncode" or two to fix it completely.
>>
>> 4. Weird folders (:-)
>>
>> Inside my iBooks library there are a number of weird folders - they show up looking like garbage names in LC, and also in Finder and in Terminal. They have permissions set to allow access - but in fact they don't - to Finder and terminal as well as to LC.
>>> So you are telling me they cannot be accessed
>>> and I encourage you to put a program on the
>>> market and explain that to those who access
>>> their folders every day and your program does
>>> not allow them to access it.
>> Remember - most if not all of these 'folders' aren't really folders, so don't contain users' files, don't contain user accessible data, and won't be seen by users.
>>> They will read your response and quit your program
>>> and continue to access their folders as usual and you
>>> will not hear from them again because they do not want
>>> to spend their time explaining to you they are able to
>>> access their folders without your program.
>> No, they won't - because (with the modified code) they will be able to see all (*) the files and folders they can see in Finder.
>> (*) with the exception of the Unicode issues mentioned in 3 above.
>>> If it causes me problems it will cause someone else
>>> problems and I am not going to explain to them do
>>> not use those folders with my program or block it
>>> and give them a dialog stating it cannot be accessed.
>>>
>>> I liked the idea of recursive but it does not work good
>>> for me.
>> It's not "recursive" that's the problem - my non-recursive version had exactly the same issue (in its first version). Attached below is an updated version with the 'safety check' that should have been there in the first place - it now builds a list of "inaccessible' folders in global variable 'gFailedFolders' as well as the list of files and folders.
>> (btw - I also changed one "after" to "before" - a marginal extra cost in LC processing, but gains a large benefit in file access locality).
>>
>>
>>
>> on dirWalk whatFolder
>>    local temp, tCount, tDirList, tDirsToDo
>>    set the itemDel to "/"
>>    set the directory to whatFolder
>>    put whatfolder &CR into tDirsToDo
>>    repeat forever
>>       put line 1 of tDirsToDo into whatFolder
>>       set the directory to whatFolder
>>       delete line 1 of tDirsToDo
>>       if the directory <> whatfolder then
>>          put whatfolder &CR after gFailedFolders
>>          if the number of lines in tDirsToDo = 0 then exit repeat
>>          next repeat
>>       end if
>>       put the files into temp
>>       add the number of lines of temp to tCount
>>       sort temp
>>       repeat for each line x in temp
>>          put whatFolder & "/" & x & cr after gHierList
>>       end repeat
>>       put the folders into tDirList
>>       sort tDirList
>>       delete line 1 of tDirList
>>       repeat for each line x in tDirList
>>          put whatFolder & "/" & x & CR before tDirsToDo
>>       end repeat
>>       if the number of lines in tDirsToDo = 0 then exit repeat
>>    end repeat
>> end dirWalk
>>
>> - Alex.
>>
>> _______________________________________________
>> 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
>>
> _______________________________________________
> 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