14.5. File CoercionsThe 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.
|