Section 14.5. File Coercions


14.5. File Coercions

The various coercions and other forms of conversion that are and are not possible between a file specifier, a POSIX file (file URL ), an alias , and a string or Unicode text (which might represent a Macintosh pathname or a POSIX pathname), are enough to make your head swim. The trouble is that there are many things you can't do; at the same time, there's always a workaround if you're willing to jump through hoops.

A Macintosh pathname string can be used to form a file specifier or alias. (A file specifier cannot be assigned to a variable or displayed as a result, but a reference to it can be.) A POSIX pathname string can be used to form a POSIX file specifier. (See Chapter 13.) As I pointed out earlier in the chapter, these are not coercions.

An alias can be coerced to a string representing its Macintosh pathname, and its POSIX path property is a string representing its POSIX pathname. An alias cannot be coerced to a file object, but a string can be used as an intermediary to form a file specifier:

 set a to alias "gromit:Users:matt2:reason:Resources:" POSIX path of a -- "/Volumes/gromit/Users/matt2/reason/Resources/" a as string -- "gromit:Users:matt2:reason:Resources:" a reference to file (a as string) -- file "gromit:Users:matt2:reason:Resources:" of «script» 

A Macintosh pathname can be coerced to an alias. (The item denoted by the pathname must exist at runtime; see Chapter 13.)

 set s to "gromit:Users:matt2:reason:Resources:" s as alias -- alias "gromit:Users:matt2:reason:Resources:" 

A file object cannot be coerced to a string. But a file object can be coerced to an alias (though in the Panther version of Script Editor there's a bug that makes it appear that it can't be), which in turn can be coerced to a string. A file object's POSIX path property is a string representing its POSIX pathname.

 set f to a reference to file "gromit:Users:matt2:reason:Resources:" f as alias -- alias "gromit:Users:matt2:reason:Resources:" POSIX path of f -- "/Volumes/gromit/Users/matt2/reason/Resources/" 

A POSIX file can be coerced to a string representing its Macintosh pathname . A string representing a POSIX path can be coerced to a POSIX file:

 set s to "/Volumes/gromit/Users/matt2/reason/Resources/" POSIX file s as string -- "gromit:Users:matt2:reason:Resources:" s as POSIX file -- file "gromit:Users:matt2:reason:Resources:" 

Because an item must exist in order to form an alias to it, coercion to an alias is a good way to test whether the item denoted by a pathname exists:

 on pathExists of s given posixStyle:b     try         if b then             POSIX file s as alias         else             s as alias         end if         return true     on error         return false     end try end pathExists pathExists of "gromit:Users:matt2" without posixStyle -- true pathExists of "/Volumes/gromit/Users/matt2" with posixStyle -- true 

Throughout the preceding, wherever I say "string," you should understand "or Unicode text," as, strictly speaking, a string might not express all the characters that the filesystem text encoding can expresswhereas Unicode text should be able to do so.

I have found, though, that with some items on disk whose names contain Unicode-only characters, coercion between an alias and Unicode text, in either direction, can fail with a runtime error. This is probably a bug. The workaround is to construct an alias with an alias specifier, and use an alias's POSIX path property to obtain its pathname. To get a Macintosh pathname from an alias reliably, get its POSIX path property, form a POSIX file specifer, and coerce that to Unicode text.





AppleScript. The Definitive Guide
AppleScript: The Definitive Guide, 2nd Edition
ISBN: 0596102119
EAN: 2147483647
Year: 2006
Pages: 267
Authors: Matt Neuburg

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net