Getting the type code of a file under OSX

Alex Tweedly alex at tweedly.net
Sat Jul 30 09:06:58 EDT 2005


Eric Chatonet wrote:

> Hi Dave,
>
> You are perfectly right: I missed this one.
> So a reliable function could be:
>
getting close ... but not quite there yet, because of the issue of comma 
being an allowed character in file names.
(I don't know if this applies to Mac - but I'm 99% sure it will, since 
this is a relatively common thing to do in Unix, so I'd expect the OSX 
file system to allow it).

If the Mac doesn't allow this, then your function is OK - but beware of 
the problem for any other operation you do on "the detailed files". 

If Mac does allow commas in file names, then it causes two problems.

The first is easy - but rather dangerous. You cannot use "item 11" for 
the file creator - you should alway use "item -1". The same applies to 
all the items returned - you should use "item -10" for file size, rather 
than "item 2", etc.

However, this doesn't work as it should on Windows.
The docs say

>     * The file's access permissions
>     * The file's creator and file type (Mac OS and OS X only)
> Any attribute that is not supported on the current system is reported 
> as "0" (zero).
>
But in fact on Windows, the creator and file type (not supported) are 
set to empty, not "0".
This is a real pain, because it means that you always have an empty last 
item - so the number of items is 10.
[Does the Mac ever return empty Creator and file type ?]

Therefore you need to add a check for the last character being comma, 
and if it is append some safe string (e.g. a space), before using the 
negative index numbers.

The second problem is rather more obscure - but if we want to claim to 
work in 100% of the cases, not 99.99..% we should cover it.

I believe you cannot use a "filter" to match any arbitrary filename you 
might be given.

filter ... pFileName & ",*"
  fails because    "name" and "name,date" both match pFileName = "name"
You might think you could depend on the fact that the files are 
alphabetic to always get the one you want first (I certainly did when I 
started writing this email), but you can't.  Using the filename "a,11" 
will falsely match the file "a" if it happens to be 11 bytes long (or 
110, or 11234, ...). Since "a" comes before "a,11" it will be the first 
one found.

You could try (I did !!) using the trick I saw from Richard a couple of 
weeks ago, using a complex filter expression to ensure the right number 
of items - e.g.
   filter ... pFileName & ",*,*,*,*,*,*,*,*,*,*"  
but that also fails the "a,11" case as above.

So I think you need to loop through them, checking the file name. But 
you cannot do as Dave suggested, and compare item 1 of each line against 
the file name, because that would fail to match a filename containing a 
comma that should match.
You instead need to compare "item 1 to -11"  (once you've done the above 
check for empty last item).

So we finish up with what I *think* is a truly reliable version

function CreatorAndType pFilePath
  local tDefaultFolder,tFile,tCreatorType, theLine, L, tNewFiles, tName
  -----
  if the platform <> "MacOs" then return "Error: filetype not  supported"
  put the defaultFolder into tDefaultFolder
  set the itemdel to slash
  set the defaultFolder to item 1 to -2 of pFilePath
  put urlDecode(the detailed files) into tFile
  put empty into tNewFiles
  put item -1 of pFilePath into tName
  set the itemDel to comma
  repeat for each line L in tFile
    put L into theLine
    if the last char of theLine = comma then put space after theLine
    if item 1 to -11 of theLine = tName then put L & cr after tNewFiles
  end repeat
  put tNewFiles into tFile
  -- put tFile & cr after msg
  if tFile = empty then return "Error: could not find file"
  set the defaultFolder to tDefaultFolder
  return tFile
 
end CreatorAndType


> Le 30 juil. 05 à 13:07, Dave Cragg a écrit :
>
>> On 30 Jul 2005, at 10:40, Eric Chatonet wrote:
>>
>>
>>> Hi Brian,
>>>
>>> As the files function returns a list sorted by alphabetical order,  
>>> I don't think it's necessary.
>>>
>>
>>
>> But, for example, if you were looking for a file named "mend.png"  
>> and there was a file named "amend.png" in the folder, you'd find  
>> "amend.png".
>>
>> A bit cumbersome, but when I've done this, I've repeated through  all 
>> lines in the detailed files and done a match on the first item  in each.
>>
>> Cheers
>> dave
>
>
>
> Best Regards from Paris,
>
> Eric Chatonet.
> ----------------------------------------------------------------
> So Smart Software
>
> For institutions, companies and associations
> Built-to-order applications: management, multimedia, internet, etc.
> Windows, Mac OS and Linux... With the French touch
>
> Free plugins and tutorials on my website
> ----------------------------------------------------------------
> Web site        http://www.sosmartsoftware.com/
> Email        eric.chatonet at sosmartsoftware.com/
> Phone        33 (0)1 43 31 77 62
> Mobile        33 (0)6 20 74 50 86
> ----------------------------------------------------------------
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your 
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>


-- 
Alex Tweedly       http://www.tweedly.net



-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.338 / Virus Database: 267.9.6/59 - Release Date: 27/07/2005




More information about the use-livecode mailing list